容器库(2)-std::vector

本文围绕C++的std::vector展开,它管理动态分配的数组,可在运行时增删元素。详细介绍了其成员函数,包括构造、赋值、析构、元素访问、迭代器、容量和修改器等,还介绍了非成员函数,如比较运算符、std::swap等,并给出各函数代码示例及输出结果。

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</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucy_stone

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值