AndreaDO

导航

C++ STL 容器-Vector类型

C++ STL 容器-Vector类型

std::vector是C++标准库中的一个动态数组容器,它提供了随机访问迭代器,因此你可以像使用普通数组一样使用vector。
vector容器可以动态地增长和缩小,这意味着你可以在不预先指定数组大小的情况下向其中添加或删除元素。
特点

  • 动态大小:vector的大小可以在运行时动态改变。
  • 连续存储:vector中的元素在内存中连续存储,这使得它可以高效地访问和遍历元素。
  • 随机访问迭代器:可以使用迭代器高效地访问vector中的任何元素。
  • 自动内存管理:vector自动管理其内部元素的内存分配和释放,你不需要手动分配或释放内存。

简单使用直接看代码

 using Group = std::vector<float>;
    // 或者 typedef std::vector<float> Group;
    
    // 初始化
    Group a;
    Group b=a;
    Group c(a);
    Group d(1.1);
    Group e(1.1,2.2);
    Group f(e.begin(),e.end());
    Group g({1.0f,2.0f,3.0f});
    Group h = {1.0f,2.0f};

    auto bol = d.empty();
    
   std::cout<<  d.size()<<'\n';
   std::cout<<  d.max_size()<<'\n';
   d.reserve(100); //预先分配100个float的空间
    auto cap = d.capacity();
// 在C++的std::vector中,capacity()函数返回的是向量当前分配的存储空间能够容纳的元素数量。
//这并不意味着向量当前包含这么多元素,而是指向量在需要重新分配内存以容纳更多元素之前可以安全地存储的元素数量。
 std::cout<<  cap<<'\n';
    
 std::cout<<  d.max_size()<<'\n';
    //支持的操作operator == != <> <= >=

//  赋值操作
b = g;
b.assign(3,1.0f);  //赋值三个1.0f
b.assign(g.begin(),g.end());
b.assign({1.0f,2.0f,3.0f});   

// 交换
b.swap(a);
std::swap(a,b);

// 元素访问
auto b0 =b[0];
auto ba0 =b.at(0);
auto bf1 =b.front();//访问第一个元素的引用
auto bb1 =b.back();//访问最后一个元素的引用

// 迭代器
auto lb1 =a.begin();
auto le1 =a.end();
auto lcb1 =a.cbegin();
auto lce1 =a.cend();
auto lb2 =a.rbegin();
auto le2 = a.rend();
auto cb = a.crbegin();
auto ce = a.crend();

a.pop_back();//弹出最后一个元素
b.erase(b.begin());//销毁第一个元素
b.erase(b.begin(),b.end());//销毁全部元素

b.push_back(10.0f);//添加浮点数到末尾
b.pop_back();

// 插入数据
auto iter = b.insert(b.end(),100.0f);//在b的最后插入一个100.0f,并且返回这个插入位置的迭代器
iter = b.insert(b.end(),10,-10.0f);//插入10个float,返回最后迭代器位置
b.insert(b.end(),h.begin(),h.end());
b.emplace(b.end(),10.0f);
b.emplace_back(10.11f);
b.resize(10); //修改分配空间大小
b.resize(100,1.1f);//分配空间大小到100,新的空间用11.1f填充内容
b.clear();//清除内容,不回收空间大小
b.shrink_to_fit();//回收多余的空间大小,比如你100只用了10,90会被回收

posted on 2024-02-27 16:32  AndreaDO  阅读(33)  评论(0)    收藏  举报