C++中Vector的使用

vector的定义

vector表示对象的集合,是一个表示可变大小数组的序列容器。就像数组一样,vector也采用连续储存空间来储存元素,也就是可以采用下标访问vector容器中的元素。但是它和数组不同的是它的大小是可以动态改变的。
从本质上来讲,vector使用动态分配数组来储存它的元素。每当插入一个新元素时,vector都会重新分配一个新的数组,然后将全部元素复制到这个新数组中,但是这将耗费很多空间和时间。
所以vector具有分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。

vector的初始化

//T是指各种数据类型,如 int,float,double等
vector<T> x;
vector<T> b(x); //例如当x = 10时,b这个容器中有10个元素。
vector<T> c = x;
vector<T> v2(n,a);//由n个a组成的vector
vector<T> v4<n>;//n个默认的元素
vector<T> v3 = { a,b,c,d };
vector<T> v5{ a,b,c };//注意是{},不是();

向vector中插入数据

//使用push_back
myv.push_back(9);//向向量尾部增加一个整数9

iterator it =myv.begin()+3;//定义it迭代器,it指向myv第4个元素
myv.insert(it,9);//在迭代器it前增加1个数9

iterator it =myv.begin()+3;//定义it迭代器,it指向myv第4个元素
myv.insert(it,2,9);//在迭代器it前增加2个数9

删除vector中的元素

方法一:使用 erase-remove 算法
 vector<int> vec = {1, 2, 3, 2, 4, 2, 5};

    // 删除值为 2 的所有元素
    vec.erase(remove(vec.begin(), vec.end(), 2), vec.end());

    // 输出剩余的元素
    for (int i : vec) {
        cout << i << " ";
    }
    cout << endl;

 方法二:使用循环逐个删除
  vector<int> vec = {1, 2, 3, 2, 4, 2, 5};
    int target = 2;

    // 循环遍历删除特定值的元素
    for (auto it = vec.begin(); it != vec.end(); ) {
        if (*it == target) {
            it = vec.erase(it); // erase 返回指向下一个元素的迭代器
        } else {
            ++it;
        }
    }

    // 输出剩余的元素
    for (int i : vec) {
        cout << i << " ";
    }
    cout << endl;


方法三:使用 std::remove_if 和 lambda 表达式
  这个方法较为复杂
  vector<int> vec = {1, 2, 3, 2, 4, 2, 5};
    int target = 2;

    // 使用 remove_if 和 lambda 表达式删除所有满足条件的元素
    vec.erase(remove_if(vec.begin(), vec.end(), [target](int x){ return x == target; }), vec.end());

    // 输出剩余的元素
    for (int i : vec) {
        cout << i << " ";
    }
    cout << endl;

vector中数据的访问

可以使用[ ] 或 at( ) 来访问

int firstElement = myv[0];
int secondElement = myv.at(1);

输出vector中的值

vector<int> myv;
for(auto a : myv){
  cout << a <<endl;
}//此时什么也不会输出,因为我们没有向vector中写入数据

vector<int> myv1(10,'a');
for(auto a : myv1){
  cour << a <<endl;
}//此时会输出十个97,因为a的ascii码为97;
方法一:使用范围循环(Range-based for loop)
使用范围循环可以简洁地遍历 std::vector 中的所有元素:
#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用范围循环输出每个元素
    for (int i : vec) {
        std::cout << i << " ";
    }
    std::cout << std::endl;

    return 0;
}
方法二:使用迭代器循环
使用迭代器循环适用于需要更灵活控制的情况:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用迭代器循环输出每个元素
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}
方法三:使用标准库算法和流迭代器
使用标准库算法和流迭代器结合 std::copy 可以将 std::vector 中的元素直接输出到流中:

#include <iostream>
#include <vector>
#include <iterator> // for std::ostream_iterator
#include <algorithm> // for std::copy

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用 std::copy 和流迭代器将元素输出到标准输出
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;

    return 0;
}
方法四:使用范围输出
如果你使用的是 C++20 或更新的版本,还可以使用范围输出 (Range-based Output)#include <iostream>
#include <vector>
#include <ranges> // for std::ranges::ostream_range

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用范围输出将元素输出到标准输出
    std::cout << std::ranges::ostream_range(std::cout, " ", vec) << std::endl;

    return 0;
}

本文参考网址:
https://blog.youkuaiyun.com/weixin_45922174/article/details/128653260?
https://www.bilibili.com/video/BV1jC41187hV/?spm_id_from=333.337.search-card.all.click&vd_source=38e7d611d9d666eb47800c04d9cc87f4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值