欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 社会 > C++ —— vector 容器

C++ —— vector 容器

2025/1/30 14:05:10 来源:https://blog.csdn.net/MaoSiri/article/details/145264405  浏览:    关键词:C++ —— vector 容器

C++ —— vector 容器

  • 引言
  • vector容器的使用
  • vector容器的嵌套

引言

string只封装了字符数组,而vector容器支持任意类型的数组。
使用vector容器需要包含头文件:#include <vector>
vector类模板的声明:

template<class T, class Alloc = allocator<T>>
class vector{
private:T *start_;  // 动态数组的首地址T *finish_; // 已使用空间的最后地址T *end_; // 动态分配内存块最后的地址……
}

在这里插入图片描述
第一个参数填数组的数据类型,第二个模板参数指定分配器,缺省用STL提供的分配器。
STL中,容器和分配器是分开的。分配器是一个用于管理内存的模板类。STL提供的默认分配器叫allocator<T>,用newdelete分配和释放内存。allocator<T>分配器的原理很简单,就是从外面把容器的数据类型T传给它,然后new一个T类型的数组就可以了。

vector容器的使用

直接看示例代码:

#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> v; // 创建一个空的vector容器cout << "v.capacity() = " << v.capacity() << endl; // v的容量 0// 跟string不一样,vector容器容量缺省不会分配任何空间。cout << "v.size() = " << v.size() << endl; // v的大小 0vector<int> v2(8); // 创建一个元素个数为8的vector容器cout << "v2.capacity() = " << v2.capacity() << endl; // v2的容量 8cout << "v2.size() = " << v2.size() << endl; // v2的大小 8vector<float> v3(4, 10.123); // 创建一个元素个数为4,每个元素值为10的vector容器for(int i = 0; i < v3.size(); i++) {cout << "v3[" << i << "] = " << v3[i] << endl;}// 使用统一初始化列表创建容器vector<int> v4({1,436,4,7,8,1,43});// vector<int> v4 = {1,436,4,7,8,1,43}; // 等同于上面的写法for(int i = 0; i < v4.size(); i++) {cout << "v4[" << i << "] = " << v4[i] << endl;}cout << "v4.front() = " << v4.front() << endl; // 返回第一个元素的值cout << "v4.back() = " << v4.back() << endl; // 删除最后一个元素,并返回其值v4.pop_back(); // 删除最后一个元素v4.push_back(666); // 在容器尾部添加一个元素cout << "v4.back() = " << v4.back() << endl; // 返回最后一个元素的值cout << "v4[4] = " << v4[4] << endl; // 访问下标为4的元素的值cout << "v4.at(5) = " << v4.at(5) << endl; // 访问下标为5的元素的值v4.insert(v4.begin() + 2, 100); // 在下标为2的位置插入一个元素for(int i = 0; i < v4.size(); i++) {cout << "v4[" << i << "] = " << v4[i] << endl;} // v4 = {1, 436, 100, 4, 7, 8, 1, 666}cout << "v4.empty() = " << v4.empty() << endl; // 判断容器是否为空 v4.empty() = 0cout << "v4.data() = " << v4.data() << endl; // 返回容器中动态数组的首的地址 v4.data() = 0x560103951f40cout << "v4.data()[2] = " << v4.data()[2] << endl; // 访问下标为2的元素的值 100cout << "*(v4.dtat() + 1) = " << *(v4.data() + 1) << endl; // 访问下标为1的元素的值 436v4.assign(4, 111); // 将容器v4重新赋值为元素个数为4,每个元素值都为111的vectorfor(int i : v4) {cout << i << " ";} // v4 = {111, 111, 111, 111}cout << endl;cout << "v4.size() = " << v4.size() << endl; // 输出容器v4的大小 4v4.assign({11, 345, 4, 12, 6}); // 将容器v4重新赋值为{1, 2, 3, 4, 5, 6}for(int i : v4) {cout << i << " ";} // v4 = {11, 345, 4, 12, 6}cout << endl;return 0;
}

vector容器的本质是数组,数组的内存空间连续的。如果在中间插入(删除)元素,要把后面的元素全部往后(前)移动。移动元素的效率是很低的。所以,尽可能不要在vector容器的中间插入和删除元素。

vector容器的嵌套

STL的大部分容器可以相互嵌套,直接看如下代码:

#include <iostream>
#include <vector>
using namespace std;int main() {vector<vector<int>> vv; // 创建一个容器vv,元素的数据类型为vector<int>vector<int> v; // 创建一个容器v,作为vv的元素v = {1, 2, 3, 4}; // 初始化容器vvv.push_back(v); // 将容器v添加到vv中v = {134,56,7,76,7,8,7};vv.push_back(v);v = {123, 123, 123};vv.push_back(v);for(int i = 0; i <vv.size(); i++) {for(int j = 0; j < vv[i].size(); j++) {cout << vv[i][j] << " ";}cout << endl;}return 0;
}

运行效果如下:

1 2 3 4
134 56 7 76 7 8 7
123 123 123

感谢浏览,一起学习!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com