【C++】Vector

C++中的vector是一种动态数组,它可以根据需要动态地调整大小,同时还提供了许多实用的函数,使其非常适合用于存储和操作元素的集合。本文将介绍C++中的vector的基本概念、使用方法和常见应用场景。

一、基本概念

vector是C++ STL库中的一个容器,它可以存储任意类型的元素。vector使用连续的内存块存储元素,因此可以通过下标访问元素,具有类似数组的特性。与数组不同的是,vector可以动态地调整大小,因此可以根据需要添加或删除元素。

vector的声明格式如下:

 

arduinoCopy code

vector<数据类型> 变量名;

例如,声明一个存储int类型元素的vector:

 

arduinoCopy code

vector<int> v;

二、使用方法

  1. 添加元素

可以使用push_back函数向vector中添加元素:

 

scssCopy code

v.push_back(1); //添加一个整数1到vector中 v.push_back(2); //添加一个整数2到vector中

  1. 访问元素

可以使用下标访问vector中的元素:

 

cCopy code

cout << v[0] << endl; //输出vector中第一个元素的值

也可以使用at函数访问vector中的元素:

 

cCopy code

cout << v.at(1) << endl; //输出vector中第二个元素的值

需要注意的是,使用下标访问vector时,如果下标越界会导致程序崩溃,因此建议使用at函数访问元素。

  1. 删除元素可以使用pop_back函数删除vector中的最后一个元素:

v.pop_back(); //删除vector中最后一个元素

也可以使用erase函数删除指定位置的元素:

v.erase(v.begin()+1); //删除vector中第二个元素

需要注意的是,使用erase函数删除元素后,vector的大小会发生变化。

  1. 获取vector的大小;

可以使用size函数获取vector中元素的个数:

cout << v.size() << endl; //输出vector中元素的个数

  1. 遍历vector

可以使用for循环遍历vector中的元素:

for (int i = 0; i < v.size(); i++) { cout << v[i] << " "; //输出vector中的元素 } cout << endl;

也可以使用迭代器遍历vector中的元素:

for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it << " "; //输出vector中的元素 } cout << endl;

需要注意的是,使用迭代器遍历vector时,不要越界。

三、常见应用场景

  1. 保存和操作一组元素


    vector可以用于保存一组元素,并且可以方便地添加、删除和访问元素。

     
  2. 保存动态大小的数据
  3. 由于vector可以动态调整大小,因此可以用于保存动态大小的数据,例如读入未知数量的数据时可以使用vector保存。

  4. 实现栈和队列
  5. 由于vector具有类似数组的特性,因此可以用于实现栈和队列等数据结构。

  6. 实现算法
  7. vector可以用于实现各种算法,例如排序、查找、去重等,可以大大简化算法实现的过程。

    四、总结

    vector是C++中非常实用的容器,具有动态调整大小、方便访问元素、简化算法实现等优点,因此在编写C++程序时经常会用到。需要注意的是,使用vector时需要注意下标越界和迭代器越界的问题,以避免程序崩溃。

Vector 跟List 使用earse的区别

在 C++ 中,std::vectorstd::list 是两种常见的容器类型,它们都提供了 erase 方法来删除容器中的元素,但二者在使用 erase 方法时有一些区别。

  1. 实现方式不同:std::vector 是基于动态数组实现的容器,而 std::list 是基于双向链表实现的容器。因此,它们在 erase 操作的实现方式上有所不同。

  2. 时间复杂度不同:std::vectorerase 方法的时间复杂度是 O(n),其中 n 是容器的大小,因为它需要将删除点后面的元素向前移动,以填补删除的空缺;而 std::listerase 方法的时间复杂度是 O(1),因为它只需要修改相邻节点的指针即可。

  3. 支持随机访问:std::vector 支持随机访问,即可以通过下标访问容器中的元素;而 std::list 不支持随机访问,因为它的元素并不是连续存储的。

  4. 补充:vector、deque底层都是用了连续空间,所以虽然++iter迭代器了,但是erase(tempit)以后底层是连续空间,删除会挪动数据,最终导致iter意义变了,已失效了。

    而list,不是连续空间,删除以后tempIt虽然失效了,但是不影响iter。

综上所述,如果需要删除一个元素后继续遍历容器,或者需要频繁进行插入和删除操作,建议使用 std::list;如果需要支持随机访问、对容器进行排序等操作,建议使用 std::vector

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值