首页 > 编程语言 >C++ STL 容器-Deque

C++ STL 容器-Deque

时间:2024-02-27 20:33:05浏览次数:27  
标签:std Deque Group 迭代 deque STL auto C++ end

C++ STL 容器-Deque

std::deque(双端队列)是C++标准模板库(STL)中的一个容器,它支持在序列的两端快速插入和删除元素。与std::vector和std::list等其他序列容器相比,std::deque在某些特定场景下具有独特的优势。

元素的访问和迭代比vector慢,迭代器不是普通的指针。

以下是std::deque的一些主要特点和用法:

  • 双端操作:std::deque允许在其前端和后端都进行插入和删除操作,且这些操作的时间复杂度都是O(1)。这意味着在序列的两端添加或删除元素非常高效。

  • 连续存储:虽然std::deque允许在两端进行快速操作,但它在内部可能并不保证元素的连续存储。这意味着它不支持指针或迭代器之间的算术运算。

  • 内存分配:std::deque通常通过分段连续空间来存储元素,这意味着它在内存分配方面可能比std::vector更灵活,尤其是在涉及大量插入和删除操作时。

  • 迭代器类型:std::deque提供了随机访问迭代器,这意味着你可以使用迭代器进行算术运算,如++、--、+=、-=等。

void mytest()
{
     using Group = std::deque<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';
   
    
 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.push_front(2.0f);//添加浮点数到头部
b.pop_back();
b.pop_front();//弹出头部

// 插入数据
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); 
b.clear(); 
b.shrink_to_fit(); 
}

标签:std,Deque,Group,迭代,deque,STL,auto,C++,end
From: https://www.cnblogs.com/AndreaDO/p/18037808

相关文章

  • 《黑暗欺骗》c++控制台 2D 版!Alpha 0.2.1
    现在只打了设置这些个东西,游戏主体还没打,那才是难点已实现功能游戏未实现设置有音量设置和键盘设置两个功能存档(这好像是最简单的功能吧?)注意事项!!!没错,如你所见,这个游戏我是使用了MCI来播放声音的!因此,你的DEV-C++需要链接到一个库打开工具->编译选项->编译器-......
  • [1] C++编程语言
    week9day1 输出指令//控制台打印std::cout<<"HelloWorld";//简化std命名空间usingnamespacestd;//转义字符cout<<"\n";//\n会被渲染成前面有\的前提下\n不会被渲染cout<<"\\n";\n;<<endl;换行; 系统指令//system()可以调用CMD......
  • c++ bind this 实现成员函数代替静态函数
    bind可以用成员函数来替代静态函数。回调函数一般使用静态函数,其中需要传入具体对象的指针,然后该对象的成员变量或函数,都需要加上“对象指针->”这个前缀。bind可以将成员函数用于回调函数。成员函数多了一个隐含的参数this,所以直接用作回调会报错,bind可以将this封装起来(可以理......
  • C++ STL 容器-Vector类型
    C++STL容器-Vector类型std::vector是C++标准库中的一个动态数组容器,它提供了随机访问迭代器,因此你可以像使用普通数组一样使用vector。vector容器可以动态地增长和缩小,这意味着你可以在不预先指定数组大小的情况下向其中添加或删除元素。特点动态大小:vector的大小可以在运......
  • 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;}自由存储区中的数据库无法被栈或者间接访问,这块内存被......