C++STL: vector容器

   std::vector

   std::vector是一个定义在 C++标准模板库(STL)中的标准容器,是最常用的容器之一。本质上,vector是一个动态数组,当容量不足时会自动向外进行拓展,并提供了强大的功能来操作其存储的元素。 同时,得益于c++强大的模板功能,其可以存储任意类型的元素,包括基础数据类型类类型,以及用户自定义的数据类型


    特点

  • vector与数组一样,在内存中是连续存储的布局,因此可以通过索引或指针来像数组一样访问其中的元素,且vector还提供了随机访问迭代器。
  • 动态容器,用户可以手动修改其大小,当容量不足时也可自动向外拓展。
  • 模板支持,其可以适应多种数据类型。
  • 用户可以指定该容器的内存分配策略,可以使用内存池来提高内存分配效率。

   vector容器因为连续内存布局的缘由,对于随机访问以及插入与删除操作(仅在尾部)的性能为常数时间复杂度 O(1)其余情况下操作均为线性时间复杂度 O(n)

   vector容器包含在<vector>头文件中,以下是该容器的一个简单运用示例:

void function() {
  std::vector<int> vec; //默认构造一个空的vector对象
  vec.push_back(5);
  vec.push_back(9);  //向vector中添加元素
  vec.pop_back();  //弹出vector中的最后一个元素

  //遍历vector中的元素
  for(auto it = vec.begin() ; it != vec.end() ; ++it) { 
    std::cout << *it << " ";
  }
  std::cout << std::endl;
}

支持的迭代器类型

        

  • 随机访问迭代器用于遍历和修改其中的元素。它支持随机访问,可以使用算术运算符(如 +-++-- 等)进行操作。
  • 常量迭代器用于遍历其中的元素,但不能修改元素的值。它也支持随机访问。
  • 反向迭代器用于反向遍历其中的元素。它支持随机访问。
  • 常量反向迭代器用于反向遍历其中的元素,但不能修改元素的值。它也支持随机访问。
void function8() {
  std::vector<std::string> vec = {"Kate" , "Tom" , "Jerry"};
  auto it = std::vector<std::string>::iterator(vec.begin());  //随机访问迭代器
  std::cout << "Third Element: " << *(it+2) << std::endl;
  std::cout << "Second Element: " << *(++it) << std::endl;

  auto it1 = std::vector<std::string>::reverse_iterator(vec.rbegin());  //逆向迭代器
  for( ; it1 != vec.rend() ; ++it1) {
    std::cout << *it1 << " ";
  }
  std::cout << std::endl;
}
//Output:
//Third Element: Jerry
//Second Element: Tom
//Jerry Tom Kate

构造与初始化

  • 默认构造:创建一个空的vector容器。
  • 指定大小的构造:创建一个提前指定大小的vector。所以元素初始化为默认值。
  • 指定大小和初值的构造:创建一个提前指定大小,使用用户所给值填充的vector
  • 迭代器范围构造:使用其他容器或数组的迭代器范围来初始化 vector
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值