⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svector.h

📁 rcssserver3d Robocup 3D比赛官方指定平台
💻 H
字号:
// Scintilla source code edit control/** @file SVector.h ** A simple expandable vector. **/// Copyright 1998-2001 by Neil Hodgson <neilh@hare.net.au>// The License.txt file describes the conditions under which this software may be distributed.#ifndef SVECTOR_H#define SVECTOR_H/** * A simple expandable integer vector. * Storage not allocated for elements until an element is used. * This makes it very lightweight unless used so is a good match for optional features. */class SVector {	enum { allocSize = 4000 };		int *v;				///< The vector	unsigned int size;	///< Number of elements allocated	unsigned int len;	///< Number of elements used in vector	bool allocFailure;	///< A memory allocation call has failed		/** Internally allocate more elements than the user wants	 * to avoid thrashing the memory allocator. */	void SizeTo(int newSize) {		if (newSize < allocSize)			newSize += allocSize;		else 			newSize = (newSize * 3) / 2;		int* newv = new int[newSize];		if (!newv) {			allocFailure = true;			return;		}		size = newSize;        	unsigned int i=0;		for (; i<len; i++) {			newv[i] = v[i];		}		for (; i<size; i++) {			newv[i] = 0;		}		delete []v;		v = newv;	}	public:	SVector() {		allocFailure = false;		v = 0;		len = 0;		size = 0;	}	~SVector() {		Free();	}	/// Constructor from another vector.	SVector(const SVector &other) {		allocFailure = false;		v = 0;		len = 0;		size = 0;		if (other.Length() > 0) {			SizeTo(other.Length());			if (!allocFailure) {				for (int i=0;i<other.Length();i++)					v[i] = other.v[i];				len = other.Length();			}		}	}	/// Copy constructor.	SVector &operator=(const SVector &other) {		if (this != &other) {			delete []v;			allocFailure = false;			v = 0;			len = 0;			size = 0;			if (other.Length() > 0) {				SizeTo(other.Length());				if (!allocFailure) {					for (int i=0;i<other.Length();i++)						v[i] = other.v[i];				}				len = other.Length();			}		}		return *this;	}	/** @brief Accessor.	 * Allows to access values from the list, and grows it if accessing	 * outside the current bounds. The returned value in this case is 0. */	int &operator[](unsigned int i) {		if (i >= len) {			if (i >= size) {				SizeTo(i);			}			len = i+1;		}		return v[i];	}	/// Reset vector.	void Free() {		delete []v;		v = 0;		size = 0;		len = 0;	}	/** @brief Grow vector size.	 * Doesn't allow a vector to be shrinked. */	void SetLength(unsigned int newLength) {		if (newLength > len) {			if (newLength >= size) {				SizeTo(newLength);			}		}		len = newLength;	}	/// Get the current length (number of used elements) of the vector.	int Length() const {		return len;	}};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -