cpp学习笔记:STL deque容器
创始人
2024-01-26 14:34:29
0

一、deque与vector的区别

①vector对于头部的插入删除数据低,数据量越大,效率越低。

②deque相对而言,对头部的插入删除速度比vector快。

③vector访问元素时的速度会比deque快,和两者内部实现有关。

二、deque构造函数

dequed1;                                        //构造d1

dequed2(d1.begin(),d1.end());    //把d1开始到结尾构造给d2

dequed3(10,100);                         //将10个100放入d3

dequed4=d3;                                 //将d3赋值给d4

#include 
#include void printDeque(const deque& d)
{for (deque::const_iterator it = d.begin(); it != d.end();it++){cout << *it << " ";}cout << endl;
}void text01()
{deque d1;for (int i = 0; i < 10;i++){d1.push_back(i);}printDeque(d1);deque d2(d1.begin(), d1.end());printDeque(d2);deque d3(10, 100);printDeque(d3);deque d4 = d3;printDeque(d4);
}

三、deque赋值操作

deque d2;        d2 = d1;

deque d3;        d3.assign(d1.begin(), d1.end());

deque d4;        d4.assign(10, 100);

#include 
#include void printDeque(const deque& d)
{for (deque::const_iterator it = d.begin(); it != d.end();it++){cout << *it << " ";}cout << endl;
}void text01()
{deque d1;for (int i = 0; i < 10;i++){d1.push_back(i);}printDeque(d1);deque d2;d2 = d1;printDeque(d2);deque d3;d3.assign(d1.begin(), d1.end());printDeque(d3);
}

四、deque大小操作

empty()                                //判断容器是否为空,返回值=1时为空

capacity()                            //容器的容量

size()                                   //返回容器中元素的个数

resize(int num)                   //重新指定容器的长度为num,

                                            //若容器边长,则默认值填充,变短则超出部分被删除

resize(int num,elem)         //重新指定容器的长度为num,

                                    //若容器边长,则以elem值填充新位置,若变短,则末尾超出位置被删除

总结:

                判断元素是否为空:empty           返回元素的个数:size

                返回容器容量:capacity               重新指定大小:resize

void text01()
{deque d1;for (int i = 0; i < 10; i++){d1.push_back(i);} printDeque(d1);if (d1.empty()) {cout << "d1为空!" << endl;} else {cout << "d1不为空!" << endl;cout << "d1的大小为:" << d1.size() << endl;} d1.resize(15, 1);printDeque(d1);d1.resize(5);printDeque(d1);
}

五、deque插入和删除

deque d;

d.push_back(10);  //尾插

d.push_front(10);   //头插

d.pop_back();        //尾删

d.pop_front();         //头删

d.insert(d.begin(), 2, 10000);      //在开头插入两个10000

d2.insert(d.begin(), d2.begin(), d2.end());

d.erase(d.begin());          //删除第一个

d.erase(d.begin(), d.end());   //删除所有

d.clear();

总结:

                尾插:push_back           尾删:pop_back

                头插:push_front           头删:pop_front

void text01()
{deque d;d.push_back(10);  //尾插d.push_back(20);d.push_front(10); //头插d.push_front(20);printDeque(d);d.pop_back();    //尾删d.pop_front();   //头删printDeque(d);
}void text02()
{deque d;d.push_back(10);d.push_back(20);d.push_front(100);d.push_front(200);printDeque(d);d.insert(d.begin(), 2, 10000);printDeque(d);d.insert(d.begin(), 2, 1000);printDeque(d);deque d2;d2.push_back(1);d2.push_back(2);d2.push_back(3);d2.insert(d.begin(), d2.begin(), d2.end());printDeque(d);
}void text03()
{deque d;d.push_back(10);d.push_back(20);d.push_front(100);d.push_front(200);printDeque(d);d.erase(d.begin());printDeque(d);d.clear();printDeque(d);
}

六、deque数据存取

at(int idx);            //返回索引idx所指的数据

operator [ ];         //返回索引idx所指的数据

front();                 //返回容器中第一个数据元素

back();                //返回容器中最后一个数据元素

void text01()
{deque d;d.push_back(10);  //尾插d.push_back(20);d.push_front(100);d.push_front(200);for (int i = 0; i < d.size();i++){cout << d[i] << " ";}cout << endl;for (int i = 0; i < d.size();i++){cout << d.at(i) << " ";}cout << endl;cout << d.front() << endl;cout << d.back() << endl;
}

七、deque排序

sort(d.begin(), d.end());    //排序

void text01()
{deque d;d.push_back(10);  //尾插d.push_back(20);d.push_front(100);d.push_front(200);printDeque(d);sort(d.begin(), d.end());printDeque(d);
}

八、案例:评委打分

#include 
#include 
#include 
#include class Person
{
public:Person(string name,int score){this->m_Name = name;this->m_Score = score;}string m_Name;int m_Score;
};void createPerson(vector&v)
{string nameSeed = "ABCDE";for (int i = 0; i < 5;i++){string name = "选手";name += nameSeed[i];int score = 0;Person p(name, score);v.push_back(p);}
}void SetScore(vector&v)
{for (vector::iterator it = v.begin(); it != v.end();it++){deque d;for (int i = 0; i < 10;i++){int score = rand() % 41 + 60;d.push_back(score);}//排序sort(d.begin(), d.end());//去掉最高分和最低分d.pop_back();d.pop_front();int sum = 0;for (deque::iterator dit = d.begin(); dit != d.end();dit++){sum += *dit;}int avg = sum / d.size();it->m_Score = avg;}
}void showScore(vector&v)
{for (vector::iterator it = v.begin(); it != v.end();it++){cout << "姓名:" << it->m_Name << " 平均分:" << it->m_Score << endl;}
}int main() 
{srand((unsigned int)time(NULL));vector v;createPerson(v);SetScore(v);showScore(v);system("pause");return 0;
}

相关内容

热门资讯

转角酱子板烧小本创业好项目 转... 转角酱子板烧专注为中小创业者提供一站式服务项目,通过标准化的运作模式,实现诸多中小创业者的创业梦想。...
转角酱子板烧生意好做吗 转角酱... 俗话说:世界上唯有爱与美食不可辜负。现如今人们的生活品质不断提高,因此对于饮食也是更加注重的。像现在...
创业王2 创业王2 创业王2加... 《创业王》()这款游戏让你有机会一尝创业的宿愿。玩家将可以自选建筑、服饰、电子、文教、汽车、食品等1...
年轻人怎么来创业? 年轻人怎么... 86年,创业十多年,工薪家庭,目前年收入八位数,公司100多人,几乎每年都是50%的增长,另外持股并...
适合小本创业项目 适合小本创业... 小本创业者最好选择无店铺经营项目,从小事开始干起,才能成就大事业,无店铺经营项目可以为创业前期节约大...
2018创业者最值得选择的小本... 3、内容创业在微博计划投入1.5亿扶持自媒体时,今日头条也推出了“千人万元计划”,为创作者提供万元“...
南宁创业 南宁创业 南宁创业扶...   南宁创业好项目1:早餐早点式样设计提示:1主食:面包、包子、馒头或其他糕点;2副食:咸菜或其他特...
上个月,在南宁的创业圈发生了一... GAME—BIKE我们首先带来的是“GAME—BIKE”。懂英语的一看就知道,这是个跟游戏跟自行车有...
为何95后都选择了创业小项目 ... 文|懂懂笔记“我还是选择和朋友一起创业,毕竟自由一些,也能够发挥专长。”今年春节后,计算机专业毕业的...
京喜无货源 2个月做到单店80... 大家好,我是大喵!直接步入正题,说白了大多数人创业的初衷就是赚钱,官方一点的说话就是实现经济独立和人...