持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情
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;
}
复制代码
结果
PS: 觉得好就点赞加收藏吧~