C++STL vector介绍与使用方法

来源:互联网 发布:怎么学编程 编辑:程序博客网 时间:2024/05/01 10:37

vector(向量)

在前面对比分析里面提到,vector内部数据结构是动态数组,也即顺序表,因此vector拥有访问数据快的优点, 但同时也有插入、删除效率低的缺点。同时,由于是动态数组,因此不需要考虑数据大小的问题,一旦vector内存空间不足,会自动重新分配内存,然后将数据拷贝到新的内存空间。

vector也是最为常用的序列容器,完全可以替换数组来使用,这样在编程过程中也会减少很多错误,同时vector还提供了一些非常方便的函数。


头文件 #include
构造函数
std::vector<int> first;              // empty vector of intsstd::vector<int> second (4,100);     // four ints with value 100std::vector<int> third (second.begin(),second.end());  // iterating through secondstd::vector<int> fourth (third);     // a copy of third

STL为标注模板库,因此所有的容器均以模板的方式提供,在使用过程中,必须向容器指定容器内存储的数据类型,可以是基本数据类型如:int, float, char, 指针等,同时也可以是自定义的struct或class。

迭代器(迭代器主要使用在算法部分)
std::vector<int> first;std::vector<int>::iterator iter;std::vector<int>::reverse_iterator riter;iter = first.begin();   //指向序列容器第一个元素iter = first.end();     //指向序列容器最后一个元素的后一个位置,也即first.end()迭代器指向位置为结束符riter = first.rbegin();riter = first.rend();for (iter = first.begin(); iter != first.end(); iter++){    cout << *iter << endl;}for (riter = first.rbegin(); riter != first.rend(); riter++){    cout << *iter << endl;}
vector容量
vector<int> first = {1, 2, 3, 4};first.size();   //返回vector长度大小,有多少个元素first.max_size();   //返回最大长度,vector是动态数组,一般不用考虑这个first.resize();     //改变vector大小,同上,一般不需要考虑first.empty();     //判断vector是否为空,没有元素返回true

在判断vector是否为空,尽量用empty函数,如果用size()是否为0来判断,则每次调用需要遍历一遍元素,效率较低。

元素访问
std::vector<int> firs(4, 100);cout << first[0] << endl;     //直接利用下标访问元素cout << first.at(0) << endl;  //与直接利用下标访问元素相同,但会检查参数是否越界,也即大于或等vector的大小cout << first.front() << endl;   //返回第一个元素(first[0])cout << first.back() << endl;    //返回最后一个元素
修改数据成员
std::vector<int> first;std::vector<int> second;std::vector<int> third;second.assign(7, 100);    //second里面指定7个元素,每个元素初始值为100third.assign(second.begin()+1, second.end()-1); //将second除去首位的元素指派给thirdfor (int i = 0; i < 4; i++){    first.push_back(i);    //向vector添加元素(添加在尾部)}int tmp = 0;tmp = first.pop_back();   //删除最后一个元素std::vector<int>::iterator it;it = first.insert(first.begin(), second.begin(), second.end());   //插入元素it = first.insert(first.begin(), 2, 100);  //插入两个100it = first.erase(first.begin());  //删除元素it = first.erase(first.begin(), first.begin()+3);  //删除头三个元素first.swap(second);   //first与second互换first.clear();      //清空vectorit = first.emplace(first.begin, 100);   //(C++11)将100插入到vector的开始位置,类似于insert函数,但是insertit = first.emplace();
0 0
原创粉丝点击