首页 > 编程语言 >C++ STL 容器-Vector类型

C++ STL 容器-Vector类型

时间:2024-02-27 16:47:27浏览次数:28  
标签:begin Group Vector STL auto 元素 C++ vector end

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会被回收

标签:begin,Group,Vector,STL,auto,元素,C++,vector,end
From: https://www.cnblogs.com/AndreaDO/p/18036880

相关文章

  • C++ STL 容器-array类型
    C++STL容器-array类型array是C++11STL封装的数组,内存分配在栈中stack,绝对不会重新分配,随机访问创建和初始化//下面的等同于inta[10];std::array<int,10>as1;//分配空间但是未初始化std::array<int,10>as2={};//分配空间并且初始化std::array<int,3>as3={1,2,3};基......
  • vc++ 使用base64 编码与解码
        Base64原理Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2^6=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为电子邮件的传输编码。在B......
  • Qt Virtual Keyboard C++集成与实现(QWidget)
    一.设置1.配置所需语言1).通过QtCreator配置打开Qt工程文件,点开左侧 Projects->Build->BuildSteps->qmake->Additionalarguments在 Additionalarguments 增加配置参数:CONFIG+="lang-ar_ARlang-da_DKlang-de_DElang-en_GBlang-es_ESlang-fa_FAlang-fi_FIlang-fr......
  • Qt Virtual Keyboard C++集成与实现(解决模态对话框键盘失效问题)
    一.Qt模态对话框先让我们来看看对话框的几种特性:1.Qt::NonModaThewindowisnotmodalanddoesnotblockinputtootherwindows.2.Qt::WindowModalThewindowismodaltoasinglewindowhierarchyandblocksinputtoitsparentwindow,allgrandparentwin......
  • c++引用和指针
    指针和引用当我们需要在程序中传递变量的地址时,可以使用指针或引用。它们都可以用来间接访问变量,但它们之间有一些重要的区别。指针是一个变量,它存储另一个变量的地址。通过指针,我们可以访问存储在该地址中的变量。指针可以被重新分配,可以指向不同的变量,也可以为NULL。指针使用*......
  • C++内存管理
    关于C++内存和分配的学习笔记C++内存和分配很容易出问题,为了编写高质量的CPP代码,我们必须了解幕后的工作原理。1.内存泄漏例如:voidleaky(){newint;//这里就是内存泄漏cout<<"我泄漏了一个int的内存!"<<endl;}自由存储区中的数据库无法被栈或者间接访问,这块内存被......
  • C++ 关键字
    C++关键字alignas和alignof用法alignasalignas指定了内存按照多少对齐。alignas(0)这种写法无效,编译器会无视你的这个代码structalignas(8)S{};//表示是8个字节的对齐方式structalignas(1)U{Ss;};//虽然里面有个S,但是依然指定了该结构体的内存对齐要求为1字......
  • C++库大全
    基础类1、DinkumwareC++Library参考站点:http://www.dinkumware.comP.J.Plauger编写的高品质的标准库。P.J.Plauger博士是Dr.Dobb's程序设计杰出奖的获得者。其编写的库长期被Microsoft采用,并且最近Borland也取得了其OEM的license,在其C/C++的产品中采用Dinkumware的库。2......
  • C++ 刷题必备
    目录语言必备语言必备在C++中刷Leetcode时,有一些常用的语言技巧和最佳实践可以帮助你更有效地解决问题。以下是一些建议:熟悉STL(StandardTemplateLibrary):使用vector,list,set,map等容器来存储和操作数据。使用algorithm库中的函数,如sort,binary_search,unique等。......
  • C++ GDAL用CreateCopy()新建栅格并修改波段的个数
      本文介绍基于C++语言GDAL库,为CreateCopy()函数创建的栅格图像添加更多波段的方法。  在C++语言的GDAL库中,我们可以基于CreateCopy()函数与Create()函数创建新的栅格图像文件。其中,CreateCopy()函数需要基于一个已有的栅格图像文件作为模板,将模板文件的各项属性信息(例如空间......