C++标准库vector类型
2015-09-01 18:55
567 查看
vector属于顺序容器,所谓顺序容器,就是元素的顺序与元素的值无关,与元素加入容器的位置相对应。
对于vector可以将其理解为可变大小数组,支持快速随机访问,在尾部之外的位置插入删除可能会比较慢。了解完概念接下来就开始学习它的用法
假设以下代码前面都包含vector头文件,并包含using namespace std;
此种定义下vec容器为空,其中尖括号中是容器中保存的类型
此种定义下vec中保存了10个5
(3)
此种定义下vec保存了数组a中的所有元素
vector的定义方法有很多,这里就只列一些常见的
(2)通过下标访问
具体实例如下
(2)在任意位置插入数据
实例如下
(3)删除元素
实例如下
(4)vector的大小
实例如下
对于vector可以将其理解为可变大小数组,支持快速随机访问,在尾部之外的位置插入删除可能会比较慢。了解完概念接下来就开始学习它的用法
假设以下代码前面都包含vector头文件,并包含using namespace std;
1.创建vector对象
vector<int> vec;
此种定义下vec容器为空,其中尖括号中是容器中保存的类型
vector<int> vec(10,5);
此种定义下vec中保存了10个5
(3)
int a[5]; vector<int> vec(begin(a),end(a));
此种定义下vec保存了数组a中的所有元素
vector的定义方法有很多,这里就只列一些常见的
2.vector中元素的访问
(1)通过迭代器访问vector<int> vec; vector<int>::iterator it; for(it = vec.begin();it != vec.end();it++) { cout<<*it; }
(2)通过下标访问
vector<int> vec(3,5); for(int i=0;i<3;i++) { cout<<vec[i]; }
3.vector类型的基本操作
(1)尾部添加数据vec.push_back(a);
具体实例如下
#include<iostream> #include<vector> using namespace std; int main(int argc,char **argv) { vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); for(auto x:vec) { cout<<x<<" "; } cout<<endl; return 0; }
(2)在任意位置插入数据
//在第i+1个数据前插入a vec.insert(vec.begin()+i,a);
实例如下
#include<iostream> #include <vector> using namespace std; int main(void) { vector<int>v(3); v[0] = 1; v[1] = 3; v[2] = 4; v.insert(v.begin(),0); v.insert(v.begin()+2,2); v.insert(v.end(),5); vector<int>::iterator it; for(it = v.begin(); it != v.end(); it++) { cout<<*it<<" "; } cout<<endl; return 0; }
(3)删除元素
删除第i+1个元素 vec.erase(vec.begin()+i);
实例如下
#include<iostream> #include<vector> using namespace std; int main(int argc,char **argv) { vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); //删除第二个元素 vec.erase(vec.begin()+1); for(auto x:vec) { cout<<x<<" "; } cout<<endl; return 0; }
(4)vector的大小
//返回vector中已有的元素个数 vec.size(); //返回vector中可保存的最大元素个数 vec.max_size(); //判断vector是否为空 vec.empty()
实例如下
#include<iostream> #include<vector> using namespace std; int main(int argc,char **argv) { vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3); //获得vec的已有元素的个数 cout<<"已有元素:"<<vec.size()<<endl; //获得vec中可以保存的最大元素个数 cout<<"最大保存元素个数:"<<vec.max_size()<<endl; //判断vec是否为空 if(vec.empty()) { cout<<"vec为空"<<endl; } else { cout<<"vec不为空"<<endl; } return 0; }
4.迭代器失效问题
由于向vector中添加元素或删除元素,可能会使迭代器失效,所以必须保证每次改变容器的操作之后都能正确的重新定位迭代器5.vector对象是如何增长的
当我们向vector中添加新元素时,若此时系统给vector的内存已被占完,则系统或为vector重新分分配一块内存该内存会比他新的内存需求更大,这样就可以保证当再有新的元素添加进来时,就不会总是要重新分配新的内存了。相关文章推荐
- 论char数组在c++和java中的不同
- c语言中的“/”和“%”
- c++中的隐藏、重载、覆盖(重写)
- 打印一个集合的幂集C++实现
- C++版的坦克大战(1)---实现基本设计和j简单思想
- C++包括头文件<>和""差额
- c语言编的心形图案,有兴趣的看看
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言day02-变量、数据类型、赋值、其他
- C/C++_文件重定向的几种方式
- c语言练习题 2-5 反弹
- Effective C++ 条款29 为"异常安全"而努力是值得的
- C++面向对象高级开发课程(第一周)
- 详解C语言中telldir()函数和seekdir()函数的用法
- C++11(std::thread)
- C++ 虚函数
- 链表初始化看C语言的二级指针(转)
- c语言bit倒置最好的算法-离msb-lsb至lsb-msb
- C++ 传参时传内置类型时用传值(pass by value)方式效率较高
- C++ 传参时传内置类型时用传值(pass by value)方式效率较高