ector容器 单端数组(只有一个开口)、动态数组(动态扩展空间)
- 构造、赋值、
- 大小 size 重置大小 resize 容量 capacity
- 是否为空 empty 交换 swap
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; #include <vector> /* vector构造函数 vector<T> v; //采用模板实现类实现,默认构造函数 vector(v.begin(), v.end());//将v[begin(), end())区间中的元素拷贝给本身。 vector(n, elem);//构造函数将n个elem拷贝给本身。 vector(const vector &vec);//拷贝构造函数。 //例子 使用第二个构造函数 我们可以... int arr[] = {2,3,4,1,9}; vector<int> v1(arr, arr + sizeof(arr) / sizeof(int)); vector常用赋值操作 assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。 assign(n, elem);//将n个elem拷贝赋值给本身。 vector& operator=(const vector &vec);//重载等号操作符 swap(vec);// 将vec与本身的元素互换。 vector大小操作 size();//返回容器中元素的个数 empty();//判断容器是否为空 resize(int num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。 resize(int num, elem);//重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长>度的元素被删除。 capacity();//容器的容量 reserve(int len);//容器预留len个元素长度,预留位置不初始化,元素不可访问。 */ void printVector(vector<int>& v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; } cout << endl; } void test01() { //一、构造函数 vector<int> v; //vector<T> v; 默认构造 int arr[] = { 2,3,4,1,9 }; vector<int> v1(arr, arr + sizeof(arr) / sizeof(int)); //第二个构造函数 printVector(v1); vector<int> v2(v1.begin(), v1.end()); //vector(v.begin(), v.end()); printVector(v2); vector<int> v3(10, 100); //vector(n, elem); 即10个100 printVector(v3); vector<int> v4(v3); //vector(const vector &vec); 拷贝构造 printVector(v4); //二、赋值使用 vector<int> v5; v5.assign(v4.begin(), v4.end()); //assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。 printVector(v5); //元素互换 v5.swap(v2); //swap(vec);// 将vec与本身的元素互换。 printVector(v5); //2,3,4,1,9 //三、大小操作 cout << v5.size() << endl; //5 元素互换 大小也会同时互换 if (v5.empty()) { cout << "v5为空" << endl; } else { cout << "v5不空" << endl; } //resize(长度,[填充]) 重新指定长度 v5.resize(10, 2); //2,3,4,1,9,2,2,2,2,2 printVector(v5); //2,3,4,1,9 v5.resize(3); //2,3,4 printVector(v5); //2,3,4,1,9 } int main() { test01(); system("Pause"); return 0; }
结果:
预留空间
void test02() { //每次扩充都会更换内存地址 vector<int>v; int* p = NULL; int num = 0; for (int i = 0; i < 100000; i++) { v.push_back(i); if (p != &v[0]) { p = &v[0]; //每次开辟空间都会重置p的地址 num++; //开辟一次空间 num加1 cout << "P=" << p << endl; cout << "v=" << &v[0] << endl; } } cout << "num = " << num << endl; //如果预先留够位置 则不会多次更换 vector<int> v2; v2.reserve(100000); int* p2 = NULL; int num2 = 0; for (int i = 0; i < 100000; i++) { v2.push_back(i); if (p2 != &v2[0]) { p2 = &v2[0]; //每次开辟空间都会重置p的地址 num2++; //开辟一次空间 num加1 cout << "P2=" << p << endl; cout << "v2=" << &v[0] << endl; } } cout << "num2= "<< num2 << endl; }
结果: