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);  //初始化为‘\0’
	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());






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值