淘先锋技术网

首页 1 2 3 4 5 6 7

vector基本概念

普通数组的区别

数组是静态空间,vector容器可以动态扩展,增加长度

动态扩展并不是在原空间之后续接新空间,而是找到比原来更大的内存空间,将原数据拷贝到新空间,释放原空间

vector容器的迭代器是支持随机访问的迭代器

vector构造函数

  • vector<T> v ;                          //使用模板类,默认构造函数
  • vector(v.begin(),v.end());             //将[v.begin(),v.end())区间中的元素拷贝给本身
  • vector(n,elem);                          //将n个elem拷贝给本身
  • vector(const vector &v) ;                   //拷贝构造函数

vector赋值

  • vector& operator=(const vector &v);               //重载赋值运算符
  • assign(v.begin(),v.end());                     //将[v.begin(),v.end())区间中的元素赋值给本身
  • assign(n,elem);                                          //将n个elem赋值给本身

vector容量和大小

  • empty();                       //判断容器是否为空,为空返回1,否则返回0
  • capacity();                         //返回容器的容量
  • size();                       //返回容器的大小,即容器中元素的个数
  • resize(int num);                           //重新指定容器的长度为num,若容器变长,则以默认值0填充新位置,如果容器变短,则末尾超过容器长度的元素被删除
  • resize(int num,int elem);                     //重新指定容器的长度为num,若容器变长,则以elem填充新位置,如果容器变短,则末尾超过容器长度的元素被删除

vector插入和删除

  • push_back(ele);                                     //尾部插入元素ele
  • pop_back();                                       //删除最后一个元素
  • insert(const_iterator pos,ele);                        //在迭代器指向的位置pos处插入一个元素ele
  • insert(const_iterator pos,int count,ele);           //在迭代器指向的位置pos处插入count个元素ele
  • erase(const_iterator pos);                          //删除迭代器指向的元素
  • erase(const_iterator begin,const_iterator end);              //删除迭代器从begin到end之间的元素
  • clear();                                                //删除容器中所有元素

vector数据存取

  • at(int id);                           //返回索引id所指的数据
  • operator[];                      //返回[]内索引所指的数据
  • front();                         //返回容器中第一个元素
  • back();                             //返回容器中最后一个元素

vector互换容器 

  • swap(v);             //容器v和当前容器互换

实际用于收缩内存 

void test()
{
	vector<int> v;
	for (int i = 0; i < 100000; ++i)
	{
		v.push_back(i);
	}
	cout << "初始时:" << endl;
	cout << "v的容量:" << v.capacity() << endl;
	cout << "v的大小:" << v.size() << endl;
	
	cout << "重新指定空间后:" << endl;
	v.resize(10);
	cout << "v的容量:" << v.capacity() << endl;
	cout << "v的大小:" << v.size() << endl;

	//用swap收缩内存
    vector<int>(v).swap(v);
	cout << "收缩内存后:" << endl;   
	cout << "v的容量:" << v.capacity() << endl;
	cout << "v的大小:" << v.size() << endl;
}

vector预留空间 

  • reserve(int len);               //容器预留len个元素长度,预留的位置并不初始化,同时也不可访问

功能:减少vector在动态扩容时的扩展次数

void test()
{
	vector<int> v;
	v.reserve(10000);    //请尝试删除此行

	int num = 0;       //计算扩容次数      
	int* p = NULL;
	for (int i = 0; i < 10000; ++i)
	{
		v.push_back(i);
		if (p != &v.at(0))
		{
			p = &v[0];
			num++;
		}
	}
	cout << num << endl;
}