vector容器
vector容器是动态拓展的过程:并不是在原空间继续连接新空间,而是在内存中找一块更大的内存空间,然后将原数据拷贝到新空间,释放原空间~
PS: 接下来我将会介绍(构造函数)、(赋值操作)、(容量大小)、(插入和删除)、(数据存取)、(互换容器)等操作,每个案例都会有代码和图片说明~
- vector构造函数
- vectorv;默认构造
- vector(v.begin(0,v.end());区间构造
- vector(n,elem);n个elem构造
- vector(const vector&v);拷贝构造
代码
//vector构造函数 void test01() { //默认构造函数 vector<int>v; for (int i = 0; i < 10; i++) v.push_back(i + 1); display(v); //从头到尾 vector<int>v2(v.begin(), v.end()); display(v2); //n个elem(10个6) vector<int>v3(10, 6); display(v3); //拷贝构造 vector<int>v4(v3); display(v4); } 复制代码
结果
vector赋值操作
- =号直接赋值(vector头文件已经重载)
- assign(beg,end);将[beg,end)区间中的数据拷贝赋值
- assign(n,elem);将n个elem拷贝
代码
//vector赋值操作 void test02() { vector<int>v1; for (int i = 0; i < 10; i++) v1.push_back(i + 1); display(v1); //=赋值 vector<int>v2; v2 = v1; display(v2); //assign vector<int>v3; v3.assign(v1.begin(), v1.end()); display(v3); //n个elem(10个6) vector<int>v4; v4.assign(10, 6); display(v4); } 复制代码
结果
vector容量大小
- empty();判断容器是否为空
- capacity();容器的容量
- size();返回容器中元素的个数
- resize(int num);重新指定长度,若变长,则按默认填充;变短,删除
- resize(int num,int elem);重新指定长度,若变长,则按elem填充;变短,删除
代码
//vector容量和大小 void test03() { vector<int>v1; if (v1.empty()) cout << "v1是空的!" << endl; for (int i = 1; i <= 10; i++) v1.push_back(i); if (!v1.empty()) { cout << "v1现在非空" << endl; display(v1); cout << "v1的容量为:" << v1.capacity() << endl; cout << "v1的大小为:" << v1.size() << endl; } vector<int>v2 = v1; //重新指定大小 v1.resize(15); display(v1); v1.resize(5); display(v1); //非默认 v2.resize(15, 100); display(v2); v2.resize(5, 100); display(v2); } 复制代码
结果
vector插入和删除
- push_back(elem);尾部插入元素elem
- pop_back();删除最后一个元素
- insert(const_iterator pos,int elem);迭代器指向pos插入elem
- insert(const_iterator pos,int count,int elem);pos插入count个elem
- erase(const_iterator pos pos);删除迭代器指向的元素
- erase(begin(),end());删除begin到end的元素
- clear();清空
代码
//vector插入和删除 void test04() { vector<int>v1; for (int i = 0; i < 10; i++) v1.push_back(i + 1); display(v1); //删除一个元素后 v1.pop_back(); display(v1); //在头部插入数 v1.insert(v1.begin(), 100); display(v1); //在尾部插入三个1000 v1.insert(v1.end(), 3, 1000); display(v1); //删除迭代器指向的元素 v1.erase(v1.begin()); display(v1); //清空 // 这两者效果相同 //v1.erase(v1.begin(), v1.end()); v1.clear(); display(v1); } 复制代码
结果
vector数据存取
- at成员函数存取
- []数组形式存取
- front();返回第一个
- back();返回最后一个
代码
//vector数据存取 void test05() { vector<int>v; for (int i = 1; i <= 10; i++) v.push_back(i); display(v); cout << "v.at(3)=" << v.at(3) << endl; cout << "v[5]=" << v[5] << endl; cout << "v.front()=" << v.front() << endl; cout << "v.back()=" << v.back() << endl; } 复制代码
结果
vector互换容器
- swap(vec);将vec与本身的元素互换
代码
//vector数据互换 void test06() { vector<int>v1; for (int i = 1; i <= 10; i++) v1.push_back(i); vector<int>v2; for (int i = 10; i > 0; i--) v2.push_back(i); display(v1); v1.swap(v2); display(v1); } 复制代码
结果
vector预留空间
- reserve(int len);减少动态拓展的次数;预留len个空间,预留位置不可访问
代码
//vector预留空间 void test07() { vector<int>v; for (int i = 1; i <= 10; i++) v.push_back(i); cout << "容量:" << v.capacity() << endl; v.reserve(1000); cout << "(预留后)容量:" << v.capacity() << endl; } 复制代码
结果