std::vector管理的是动态分配的数组,可以在运行时添加和删除元素。vector管理的底层内存是连续的,当添加元素时没有剩余容量时,vector会重新申请一片新的合适大小的连续内存。
本文章的代码库:
https://gitee.com/gamestorm577/CppStd
成员函数
构造、赋值和析构
构造函数
可以用元素或者另一个vector来构造vector。代码示例:
std::vector<float> v1;
std::vector<float> v2(3, 1.f);
std::vector<float> v3(3);
std::vector<float> v4(v2.begin(), v2.begin() + 2);
std::vector<float> v5(v2);
std::vector<float> tmp(v2);
std::vector<float> v6(std::move(tmp));
std::vector<float> v7{1.f, 2.f, 3.f, 4.f, 5.f};
std::cout << "v1 size = " << v1.size() << std::endl;
std::cout << "v2 size = " << v2.size() << std::endl;
std::cout << "v3 size = " << v3.size() << std::endl;
std::cout << "v4 size = " << v4.size() << std::endl;
std::cout << "v5 size = " << v5.size() << std::endl;
std::cout << "v6 size = " << v6.size() << std::endl;
std::cout << "v7 size = " << v7.size() << std::endl;
输出结果:
v1 size = 0
v2 size = 3
v3 size = 3
v4 size = 2
v5 size = 3
v6 size = 3
v7 size = 5
析构函数
销毁vector时,会从右到左依次调用元素的析构函数。代码示例:
struct MyStruct
{
~MyStruct()
{
std::cout << "Destruct " << Index << std::endl;
}
int Index = 0;
};
std::vector<MyStruct> vec(3);
vec[0].Index = 1;
vec[1].Index = 2;
vec[2].Index = 3;
输出结果:
Destruct 3
Destruct 2
Destruct 1
赋值函数
可以另一个vector或者元素列表给vector赋值。代码示例:
std::vector<int> tmp{1, 2, 3, 4};
std::vector<int> vec1;
std::vector<int> vec2;
std::vector<int> vec3;
vec1 = tmp;
vec2 = std::move(tmp);
vec3 = {1, 2, 3, 4, 5};
std::cout << "vec1 size = " << vec1.size() << std::endl;
std::cout << "vec2 size = " << vec2.size() << std::endl;
std::cout << "vec3 size = " << vec3.size() << std::endl;
输出结果:
vec1 size = 4
vec2 size = 4
vec3 size = 5
assign
可以用元素、元素列表和迭代器给vector赋值,vector原来的内容将被替换。代码示例:
std::vector<float> vec = {1.f, 2.f, 3.f, 4.f, 5.f};
std::vector<float> tmp = {1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f};
vec.assign(3, 5.f);
std::cout << "vec size = " << vec.size() << std::endl;
vec.assign(tmp.begin(), tmp.begin() + 7);
std::cout << "vec size = " << vec.size() << std::endl;
vec.assign({1.f, 2.f, 3.f, 4.f, 5.f, 6.f, 7.f, 8.f});
std::cout << "vec size = " << vec.size() << std::endl;
输出结果:
vec size = 3
vec size = 7
vec size = 8
</