构造函数
vector基本概念
功能:vector数据结构和数组非常相似,也成为单端数组
vector与普通数组的区别:不同之处在于数组是静态空间,而vector可以动态扩展
动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
vector容器的迭代器是支持随机访问的迭代器
vector构造函数
功能描述:创建vector容器
函数原型:
1 2 3 4
| vector<T> v; vector(v.begin(), v.end()); vector(n, elem); vector(const vector &vec);
|
Demo
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
| #include<iostream> #include<vector> using namespace std; void printVector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; }
void test01() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } printVector(v1); vector<int>v2(v1.begin(), v1.end()); printVector(v2); vector<int>v3(10, 100); printVector(v3); vector<int>v4(v3); printVector(v4); } int main() { test01(); system("pause"); return 0; }
|
运行结果
1 2 3 4
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
|
总结:vector的多种构造方式没有可比性,灵活使用即可
赋值操作
vector赋值操作
功能描述:给vector容器进行赋值
函数原型:
1 2 3
| vector& operator=(const vector &vec); assign(beg, end); assign(n, elem);
|
Demo
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
| #include<iostream> #include<vector> using namespace std; void printVector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; }
void test01() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } printVector(v1); vector<int>v2; v2 = v1; printVector(v2); vector<int>v3; v3.assign(v1.begin(), v1.end()); printVector(v3); vector<int>v4; v4.assign(10, 100); printVector(v4); } int main() { test01(); system("pause"); return 0; }
|
运行结果
1 2 3 4
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 100 100 100 100 100 100 100 100 100 100
|
总结:vector赋值方式比较简单,使用operator=,或者assign都可以
容量和大小
vector容量和大小
功能描述:对vector容器的容量和大小操作
函数原型:
1 2 3 4 5 6 7
| empty(); capacity(); size(); resize(int num); resize(int num, elem);
|
Demo
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<iostream> #include<vector> using namespace std; void printVector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; }
void test01() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } printVector(v1); if (v1.empty()) { cout << "v1为空" << endl; } else { cout << "v1不为空" << endl; cout << "v1的容量为:" << v1.capacity() << endl; cout << "v1的大小为:" << v1.size() << endl; } v1.resize(15, 100); printVector(v1); v1.resize(5); printVector(v1); } int main() { test01(); system("pause"); return 0; }
|
运行结果
1 2 3 4 5 6
| 0 1 2 3 4 5 6 7 8 9 v1不为空 v1的容量为:13 v1的大小为:10 0 1 2 3 4 5 6 7 8 9 100 100 100 100 100 0 1 2 3 4
|
总结
- 判断是否为空–empty
- 返回元素个数–size
- 返回容器容量–capacity
- 重新指定大小–resize
插入和删除
vector插入和删除
功能描述:对vector容器进行插入,删除操作
函数原型:
1 2 3 4 5 6 7
| push_back(ele); pop_back(); insert(const_iterator pos, ele); insert(const_iterator pos, int count, ele); erase(const_iterator pos); erase(const_iterator start, const_iterator end); clear()
|
Demo
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 43 44 45
| #include<iostream> #include<vector> using namespace std; void printVector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; }
void test01() { vector<int>v1; v1.push_back(10); v1.push_back(20); v1.push_back(30); v1.push_back(40); v1.push_back(50); printVector(v1); v1.pop_back(); printVector(v1); v1.insert(v1.begin(), 100); printVector(v1); v1.insert(v1.begin(), 2, 1000); printVector(v1); v1.erase(v1.begin()); printVector(v1); v1.clear(); printVector(v1); } int main() { test01(); system("pause"); return 0; }
|
运行结果
1 2 3 4 5
| 10 20 30 40 50 10 20 30 40 100 10 20 30 40 1000 1000 100 10 20 30 40 1000 100 10 20 30 40
|
总结
- 尾插:push_buck
- 尾删:pop_back
- 插入:insert(位置迭代器)
- 删除:erase(位置迭代器)
- 清空:clear
数据存取
vector数据存取
功能描述
函数原型
1 2 3 4
| at(int idx); operator[]; front(); back();
|
Demo
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
| #include<iostream> #include<vector> using namespace std;
void test01() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } for (int i = 0; i < v1.size(); i++) { cout << v1[i] << " "; } cout << endl; for (int i = 0; i < v1.size(); i++) { cout << v1.at(i) << " "; } cout << endl; cout << "第一个元素为:" << v1.front() << endl; cout << "最后一个元素为:" << v1.back() << endl; } int main() { test01(); system("pause"); return 0; }
|
运行结果
1 2 3 4
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 第一个元素为:0 最后一个元素为:9
|
总结
- 除了用迭代器获取vector容器中元素,[]和at也可以
- front返回容器第一个元素
- back返回容器最后一个元素
互换容器
vector互换容器
功能描述
函数原型
Demo
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| #include<iostream> #include<vector> using namespace std;
void printVector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; }
void test01() { vector<int>v1; for (int i = 0; i < 10; i++) { v1.push_back(i); } cout << "交换前:" << endl; printVector(v1); vector<int>v2; for (int i = 10; i > 0; i--) { v2.push_back(i); } printVector(v2); cout << "交换后:" << endl; v1.swap(v2); printVector(v1); printVector(v2); }
void test02() { vector<int>v; for (int i = 0; i < 100000; i++) { v.push_back(i); } cout << "v的容量为:" << v.capacity() << endl; cout << "v的大小为:" << v.size() << endl; v.resize(3); cout << "v的容量为:" << v.capacity() << endl; cout << "v的大小为:" << v.size() << endl; vector<int>(v).swap(v); cout << "v的容量为:" << v.capacity() << endl; cout << "v的大小为:" << v.size() << endl; } int main() { test01(); test02(); system("pause"); return 0; }
|
运行结果
1 2 3 4 5 6 7 8 9 10 11 12
| 交换前: 0 1 2 3 4 5 6 7 8 9 10 9 8 7 6 5 4 3 2 1 交换后: 10 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 v的容量为:138255 v的大小为:100000 v的容量为:138255 v的大小为:3 v的容量为:3 v的大小为:3
|
总结
swap可以使两个容器互换,可以达到实用的收缩内存效果
预留空间
vector预留空间
功能描述
函数原型
Demo
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
| #include<iostream> #include<vector> using namespace std;
void test01() { vector<int>v; v.reserve(100000); int num = 0; int* p = NULL; for (int i = 0; i < 100000; i++) { v.push_back(i); if (p != &v[0]) { p = &v[0]; num++; } } cout << "num = " << num << endl; } int main() { test01(); system("pause"); return 0; }
|
运行结果
总结
如果数据量较大,可以一开始利用reserve预留空间