vector 向量容器

vector 向量容器

原理

vector容器是一个线性结构,用3个指针存放向量的起始字节位置、当前最后一个向量元素的末尾字节,整个容器所占用的内存空间的末尾字节。

vector 向量容器_第1张图片

    对于不要求分配n个元素的vector容器的创建,M_start,M_finish和M_end_of_storage均为0(NULL指针)。

vector内存分配的类的基本框架代码如下:

template //Alloc 内存分配器
class Vector_base
{
	...
protected:
	T* M_start;
	T* M_finish;
	T* M_end_of_storage;
	...

};

应用

1.创建vector

//构造函数
vector(const A& A = A())//A是内存分配器
//创建对象
vector v;

//构造函数
vector(size_type n)
//创建对象
vector v(10);//10个元素的向量

//构造函数
vector(size_type n, const T& value)
//创建对象
vector v(10, 9)//10个元素的向量,每个向量初始化为9

//构造函数
vector(const vector&)
//创建对象
vector v1(5, 'k');
vector v2(v1);
//构造函数
vector(const InputIterator first, const InputIterator last, const A& A = A())
//创建对象
int arrays[] = {11, 13, 19, 23, 27};
vector v(arrays, arrays+5);

2.遍历

vector v;
v.push_back(12);
v.push_back(54);
v.push_back(7);
v.push_back(66);

//数组方式遍历
for(int i = 0; i< v.size(); i++)
	cout<::iterator i, iend;
iend = v.end();
for(i = v.begin(); i!=iend; i++)
	cout<< *i <<" ";
//迭代器反向遍历
vector::reverse_iterator i, iend;
iend = v.rend();
for(i = v.rbegin(); i!=iend; i++)
cout<< *i <<" ";

3.插入

insert()函数是指定在任意位置插入元素,插入时需要将插入位置后面的元素移位,以便空出一个位置插入。

vector v;
v.push_back(12);
v.push_back(54);
v.push_back(7);
v.push_back(66);

v.insert(v.begin()+3,9);//在66的前面插入9
v.insert(v.begin(), 4);//在12的前面插入4
v.insert(v.end(), 29)//在最末尾插入29

4.元素删除

iteraror erase(iterator pos);

iteraror erase(iterator first, iterator  last);

void clear();//等同于erase(begin(), end());

5.交换

void swap(vector&);

你可能感兴趣的:(STL)