AndreaDO

导航

C++ STL 容器-Deque

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(); 
}

posted on 2024-02-27 20:27  AndreaDO  阅读(53)  评论(0)    收藏  举报