C++初学者指南第一步—5.介绍std::vector
注意std代表C++标准库的命名空间,vector(向量)是标准库中的一种数据容器:动态数组,用vector向量这个名称不太准确,因为历史原因一直保留下来,适应就好。
- C++的默认动态数组
- 数组 =可以保存相同类型的不同值/对象
- 动态 =大小可以在运行时更改
这是一个简短的介绍,作为C++初学者指南的一部分。如果您正在寻找包含指导方针、最佳实践和常见错误的更完整的接口概述,请参阅此页。
1.初始化/访问
#include <vector> //头文件
std::vector<int> v {2, 7, 9}; //用3哥元素初始化vector
cout << v.size() << '\n'; //3 (vector中的元素个数)
cout << v[0] << '\n'; //2
cout << v[1] << '\n'; //7
v[1] = 4; //赋予新的值
cout << v[1] << '\n'; //4
cout << v.front() << '\n'; //2(第一个元素)
cout << v.back() << '\n'; //9(最后一个元素)
注意
这里声明和定义了两个int型vector,第一个vector是用花括号初始化,是用花括号里的值对动态数组进行初始化。第二个vector用小括号是调用了vector的构造函数进行初始化,第一个参数是元素个数,第二哥参数是元素的值,这里是2。
2.添加元素
vector<T>::push_back(Element)
在vector的末尾添加一个类型为 T 的元素
运行这段代码
3.Resizing调整大小
4.在尾部删除元素
5. 复制一直是深拷贝!
vector被称作常规类型,也就是说,它在以下方面与 int 的行为类似:
- 深度复制:复制创建一个新的向量对象,并复制其中包含的所有对象。
- 深度赋值:将所有包含对象从源复制到赋值目标。
- 深度比较:比较两个vector时,比较其包含所有对象的值
- 深拥有:销毁vector将销毁所有包含的对象
C++标准库和生态系统中的大多数类型都是常规的。
这里讲的有些简单容易误解我再详细说一下:
- 深拷贝(Deep Copying):
当你拷贝一个 vector (例如 vector v2 = v1;)时,会创建一个全新的 vector 对象,并且将原 vector 中的所有元素(这里是整数)都拷贝过去。
这意味着对拷贝后的 vector 进行修改(例如添加或删除元素)不会影响到原来的 vector。 - 深赋值(Deep Assignment):
当你将一个 vector 赋值给另一个 vector (例如 v1 = v2;)时,源 vector (v2) 中的所有元素都会被拷贝到目标 vector (v1) 中。
赋值之后,这两个 vector 包含的元素是相同的,可以独立地进行修改而不会影响到对方。 - 深比较(Deep Comparison):
当你比较两个 vector (例如 v1 == v2)时,比较是逐个元素进行的。
比较会检查两个 vector 中的所有元素是否完全相等,比较的是元素的具体值。 - 深拥有(Deep Ownership):
当一个 vector 被销毁(例如当它超出作用域或被显式删除)时,它包含的所有元素也会被销毁。
这确保了元素占用的内存被正确释放,避免了内存泄漏。
运行这段代码
请注意,如果向量包含很多元素(或者其中包含的类型复制代价很高),那么复制向量可能会非常耗时。
如果文章对您有用请随手点个赞,谢谢!