C++_vector 操作
1. vector:
1.1 vector 说明
- vector 是向量类型,可以容纳许多类型的数据,因此也被称为容器
- (可以理解为动态数组,是封装好了的类)
- 进行
vector
操作前应添加头文件#include
1.2 vector 初始化:
方式 1.
方式 2.
方式 3.
方式 4.
1 2
| vector<int>a(b.begin(),b.begin+3);
|
方式 5.
1 2 3
| int b[7]={1,2,3,4,5,6,7}; vector<int> a(b,b+7);
|
1.3 vector 对象的常用内置函数使用(举例说明)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<vector> vector<int> a,b;
a.assign(b.begin(),b.begin()+3);
a.assign(4,2);
a.back();
a.front();
a[i];
a.clear();
a.empty();
a.pop_back();
a.erase(a.begin()+1,a.begin()+3);
a.push_back(5);
a.insert(a.begin()+1,5);
a.insert(a.begin()+1,3,5);
a.insert(a.begin()+1,b+3,b+6);
a.size();
a.capacity();
a.resize(10);
a.resize(10,2);
a.reserve(100);
a.swap(b);
a==b;
|
2. 顺序访问 vector 的几种方式,举例说明
2.1. 对向量 a 添加元素的几种方式
1.向向量 a 中添加元素
1 2
| vector<int>a; for(int i=0;i<10;++i){a.push_back(i);}
|
2.从数组中选择元素向向量中添加
1 2 3
| int a[6]={1,2,3,4,5,6}; vector<int> b; for(int i=0;i<=4;++i){b.push_back(a[i]);}
|
3.从现有向量中选择元素向向量中添加
1 2 3 4 5 6 7
| int a[6]={1,2,3,4,5,6}; vector<int>b; vector<int>c(a,a+4); for(vector<int>::iterator it=c.begin();it<c.end();++it) { b.push_back(*it); }
|
4.从文件中读取元素向向量中添加
1 2 3
| ifstream in("data.txt"); vector<int>a; for(int i;in>>i){a.push_back(i);}
|
5.常见错误赋值方式
1 2
| vector<int>a; for(int i=0;i<10;++i){a[i]=i;}
|
2.2 从向量中读取元素
1.通过下标方式获取
1 2 3
| int a[6]={1,2,3,4,5,6}; vector<int>b(a,a+4); for(int i=0;i<=b.size()-1;++i){cout<<b[i]<<endl;}
|
2.通过迭代器方式读取
2.通过迭代器方式读取
1 2 3
| int a[6]={1,2,3,4,5,6}; vector<int>b(a,a+4); for(vector<int>::iterator it=b.begin();it!=b.end();it++){cout<<*it<<" ";}
|
3.几个常用的算法
1 2 3 4 5 6 7 8 9
| #include<algorithm>
sort(a.begin(),a.end());
reverse(a.begin(),a.end()); copy(a.begin(),a.end(),b.begin()+1);
find(a.begin(),a.end(),10);
|
find 使用
不同于 map(map 有 find 方法),vector 本身是没有 find 这一方法,其 find 是依靠 algorithm 来实现的。
话不多说,上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <iostream> #include <algorithm> #include <vector>
int main() { using namespace std;
vector<int> vec;
vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); vec.push_back(5); vec.push_back(6);
vector<int>::iterator it = find(vec.begin(), vec.end(), 6);
if (it != vec.end()) cout<<*it<<endl; else cout<<"can not find"<<endl;
return 0; }
|
记着要包含 algorithm 这一头文件,其定义了 find 这一函数。