Vector的小知识点

预留容量的两类方式:

1、不调用默认的构造函数

        vector<int> v;
	v.push_back(111);
	v.reserve(20);
	std::copy(v.begin(), v.end(), ostream_iterator<int>(cout," "));//只能打印出111;


2、调用默认构造函数

        vector<int> v(20);
	std::copy(v.begin(), v.end(), ostream_iterator<int>(cout," "));//打印出20个零

         vector<int> v;
         v.resize(20);
         std::copy(v.begin(), v.end(), ostream_iterator<int>(cout," "));//打印出20个零

缩小vector的容量:
         template<class T>
         void shrinkCapacity(vector<T>& v)
         {
	        vector<T> temp(v); //copy elements into a new vector
	        v.swap(temp);      //swap internal vector data //swap具有常数时间复杂度,通过交换一些指针完成。
         }

        vector<int> v(10);
	v.reserve(100);
	cout <<"size:"<< v.size()<<"capacity:" << v.capacity() << endl;  //10   100

	shrinkCapacity(v);
	cout << "size:" << v.size() << "capacity:" << v.capacity() << endl;  //10   10

将vector当作一般array使用:

只要你需要一个类型为T的数组,就可以采用vector<T>。

        vector<char> c;
	c.resize(20);  //初始化为‘’
	strcpy(&c[0], "Hello world");
	cout << &c[0] << endl;


循环语句内删除值为x的元素:

        vector<int> ve;
	ve.push_back(1);
	ve.push_back(2);
	ve.push_back(2);
	ve.push_back(3);
	ve.push_back(4);
	ve.push_back(4);
	vector<int>::iterator iter;
	for (iter = ve.begin(); iter != ve.end();)
	{
		if (*iter == 4)
			iter = ve.erase(iter);
		else
			++iter;

	}
	cout << "*************" << endl;
	copy(ve.begin(), ve.end(), ostream_iterator<int>(cout, " "));


erase返回的是下个元素的位置,内存移动后即是删除元素的位置。

insert返回的是插入元素的位置,即原来当前位置的元素及以后元素全部往后移动,当前位置插入新元素。


最简便删除某个值为x的元素:

ve.erase(remove(ve.begin(), ve.end(), x),ve.end());






原文地址:https://www.cnblogs.com/ggzone/p/10121357.html