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
- C++STL vector介绍与使用方法
- C++STL bitset介绍与使用方法
- C++STL map介绍与使用方法
- C++STL set介绍与使用方法
- C++STL库 vector map list 使用方法
- C++STL中的vector简要介绍
- C++ STL MAP 使用方法与应用介绍
- C++ STL stack介绍与使用方法
- C++ STL queue介绍与使用方法
- C++ STL deque介绍与使用方法
- C++ STL list介绍与使用方法
- C++ STL unordered_map介绍与使用方法
- STL vector 容器介绍
- STL vector 容器介绍
- STL vector 容器介绍
- STL vector 容器介绍
- STL vector 容器介绍
- STL vector 容器介绍
- Android项目 匹配Text里面的Emoji 和 QQ表情
- bzoj 1059
- TI官方ndk的应用和配置
- C++ string类介绍与使用方法
- 关于学习SpringMvc整合QuartZ定时管理任务的初步整理
- C++STL vector介绍与使用方法
- 从git导入项目没有Gradle的解决方案
- C++STL bitset介绍与使用方法
- 多类分类(Multi-label classification)性能评价之宏平均(macro-average)与微平均(micro-average)
- 设计模式-----模板模式
- Mybatis源码解读——Mybatis demo工作流程
- 第十六周【项目一-(3)冒泡排序】
- C++STL map介绍与使用方法
- C++STL set介绍与使用方法