zoukankan      html  css  js  c++  java
  • 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());





    
  • 相关阅读:
    第一阶段冲刺——4
    Day 1 测试流程--H模型
    【疑问】待解决
    Zookeeper 入门(一)
    【基础组件1】Flume入门(一)
    埋点测试、埋点接口测试
    单点登录 VS 多点登录
    web系统原理
    测试用例总结篇(一)
    功能测试心得(二)
  • 原文地址:https://www.cnblogs.com/ggzone/p/4052440.html
Copyright © 2011-2022 走看看