如码:
#include <iostream> #include <vector>//随机访问 末尾插入删除----std::vector #include <list> //双向列表 #include <deque>//双端队列 随机访问 #include <string> #include <algorithm>//算法定义头文件 #include <numeric> //求和函数存在的头文件 using namespace std; class Person { public: Person(); Person(char *name) { this->name=name; } void showName() { cout<<"name ="<<name<<endl; } private: char *name; }; void TestVector() { double data[]={1.2,3.4,5.5,4.2,6.4,7.8}; vector<int> v1(100,-1);//初始化第一种,1参放数量,2参放初始化参量 v1[2]=42;//随机访问 可直接修改元素 v1.push_back(22);//在末尾添加元素 vector<double> v2(data,data+4);//将数组元素初始化成矢量 vector<double> v3(v2.begin(),v2.end()-1);//从别的矢量进行初始化 cout<<"v1: size="<<v1.size()<<" capacity="<<v1.capacity()<<" v1[100]="<<v1[100]<<endl; cout<<"v2: size="<<v2.size()<<" capacity="<<v2.capacity()<<" v2[1]= "<<v2[1]<<endl; cout<<"v3: size="<<v3.size()<<" capacity="<<v3.capacity()<<" v3[1]= "<<v3[1]<<endl; /* begin() end() 两个迭代器 rbegin() rend()两个逆向迭代器 end指向的是最后一个元素的下一个位置 */ auto len=v1.capacity();//获得容器当前的容量的容量 auto size=v1.size();//获得容器的大小 if(v2.empty())//判断是否为空 cout<<"this vector is empty!"<<endl; //最大容量 vector<string> strings; cout<<"the max size of the vector is "<<strings.max_size()<<endl; //改变大小 vector<int> v4(5,66); v4.resize(6,88);//66 66 66 66 66 88 v4.resize(7);//66 66 66 66 66 88 0 v4.resize(4);//66 66 66 66 //访问元素--超过界限会抛出out_of_range异常 cout<<" v1[1]= "<<v1.at(1)<<endl; //访问最前和最后一个元素 int last=v1.back(); cout<<" v1 first = "<<v1.front()<<" last ="<<v1.back()<<endl; last=0; cout<<" change last ="<<v1.back()<<endl; cout<<"添加一个元素 201"<<endl; v1.push_back(201); cout<<" v1 last = "<<v1.back()<<endl; //这种方式得来的元素不能修改 const int& firstNumber=v1.front(); const int& lastNumber=v1.back(); //删除末尾元素-----clear()清空所有元素 v1.pop_back(); cout<<" 删除元素后 last ="<<v1.back()<<endl; //insert(index,number(可有可无,插入多少个相同元素),element)可在制定位置插入元素 //erase()可删除指定位置的元素(start,end)可删除区间内元素 vector<int> v5(3,66); vector<int> v6(4,77); cout<<"v5 : "; for(int i=0;i<v5.size();i++) cout<<v5.at(i)<<" "; cout<<endl; cout<<"v6 : "; for(int i=0;i<v6.size();i++) cout<<v6.at(i)<<" "; cout<<endl; //交换后 v5.swap(v6); cout<<"v5 : "; for(int i=0;i<v5.size();i++) cout<<v5.at(i)<<" "; cout<<endl; cout<<"v6 : "; for(int i=0;i<v6.size();i++) cout<<v6.at(i)<<" "; cout<<endl; //assign(vector.start,vector.end)可换成vector中的区间内元素 //vector不仅可以包含所有基本数据类型还能包含类类型 //迭代器遍历 vector<Person> v7; Person p1("zhangsan"); Person p2("lisi"); v7.push_back(p1); v7.push_back(p2); auto iter=v7.begin(); while(iter!=v7.end()) iter++->showName(); } void dequeTest() { //创建容器的方法与vector差不多 二三行可以取得它的迭代器与反转迭代器 deque<int> data; deque<int> ::iterator iter; deque<int> ::reverse_iterator riter; cout<<"please enter the value,zero will stop enter!"<<endl; int value(0); while(cin>> value , value!=0) data.push_front(value);//在头部插入 push_back在末尾插入 //用两种迭代器遍历 cout<<"the values you enter!"<<endl; for(iter=data.begin();iter !=data.end();iter++) cout<<*iter<<" "; cout<<endl; cout<<"the values you enter!using reverse iter"<<endl; for(riter=data.rbegin();riter !=data.rend();riter++) cout<<*riter<<" "; cout<<endl; //把输入的进行排序 cout<<endl<<"sort the value you input:"<<endl; sort(data.rbegin(),data.rend()); //输出排序后 cout<<"after the sort,value:"<<endl; for(iter=data.begin();iter !=data.end();iter++) cout<<*iter<<" "; cout<<endl; //算出总数 cout<<"the sum of the data:"<<accumulate(data.begin(),data.end(),0)<<endl; /*容器的大致方法都是差不多的 和vector区别不大*/ } void listTest()//双向链表 list不支持随机访问 { list<string> names; list<string> xbox(20);//empty of 20 list<int> element(10,2);//ten elements are all 2 //可以用size拿到容量 resize改变长度 与vector deque方法大体相同 //可以使用push方法在头尾进行插入 也可以用insert方法在任意位置进行插入 cout<<"the elements contain:"<<endl; for(auto iter =element.begin();iter!=element.end();iter++) cout<<*iter<<" "; element.insert(++element.begin(),30);//the second insert 30 cout<<endl<<"after inserting :"<<endl; for(auto iter =element.begin();iter!=element.end();iter++) cout<<*iter<<" "; cout<<endl; }
相关推荐
STL中vector、list、deque和map的区别
这对于学习STL的工作原理、优化代码性能以及理解和实现其他容器(如list、set、map等)都是非常有价值的实践。 总之,这个"STL.zip"压缩包为学习和实践C++ STL提供了很好的素材,涵盖了面向对象编程中的模板、容器...
学习`vector`容器时,还需要理解其与其他STL容器如`deque`、`list`和`array`的区别,以便在不同的场景下选择最合适的容器。例如,`deque`在两端插入和删除更高效,`list`则适合频繁的插入和删除,而`array`是固定...
在这个主题中,我们将深入探讨vector、list、map、set和deque这五个主要的STL容器,并通过具体的例子和PPT讲解来理解它们的应用。 1. **vector**:vector是动态数组,它可以方便地在任何位置插入和删除元素,但主要...
本篇文章将详细讲解STL中的三个核心容器:map、vector和list,以及它们的基本操作。 首先,我们来看**map**。Map是一个关联容器,它存储键值对(key-value pairs),每个键都是唯一的。键和对应的值通过一对尖括号...
常见的容器有vector(动态数组)、list(双向链表)、deque(双端队列)、set(红黑树实现的集合)和map(键值对映射)。每个容器都有其特定的性能特性和用途,例如,vector适合快速访问元素,而list则支持高效的...
STL的学习文档则会深入讲解STL的核心组件,包括容器(如vector、list、deque、set和map)、迭代器、算法(如排序、查找和转换)以及仿函数(functors)。STL容器提供了一种存储和组织数据的方式,而迭代器则允许...
标题和描述中的知识点聚焦于STL(Standard Template Library,标准模板库)的学习总结,特别是list容器的使用。以下是对这些知识点的深入解析: ### STL概述 STL是C++标准库的一部分,由Stepanov和Lee等计算机科学...
6. **与其他容器的比较**:`std::vector`与`std::deque`、`std::list`等其他STL容器在不同操作上的性能对比,可以帮助选择适合特定应用场景的容器。 **总结** “STL_Depue_Vector_Compare”可能是一个关于`std::...
"STL_tutorial_reference.pdf"则很可能是STL的教程与参考手册,详细介绍了STL的各种组件,包括容器(如vector、list、deque、set、map等)、迭代器的使用方式、算法库(如排序、查找、变换等)以及函数对象(如比较...
容器(Container):是一种数据结构,如list,vector,deque,queue等,以模板类的方法提供,为了访问容器中的数据,可以使用由容器类提供的迭代器。 二。迭代器(Iterator):提供了访问容器中对象的方法。 三...
1. 容器(Containers):这些是存储和管理对象的类模板,如`vector`、`list`、`deque`、`set`、`map`等。`vector`提供动态数组的功能,可以在任意位置插入和删除元素;`list`由双向链表实现,适合频繁的插入和删除...
容器是STL提供的一系列数据结构,如vector(动态数组)、list(双向链表)、set(红黑树实现的集合)和map(键值对映射)。它们为存储和管理数据提供了不同的方式。迭代器则扮演了访问容器内元素的角色,类似于指针...
1. 容器:这是STL提供的一系列内置数据结构,如vector(动态数组)、list(双向链表)、deque(双端队列)、set(集合)、map(映射)、unordered_set(无序集合)、unordered_map(无序映射)等。每个容器都有其...
1. 容器(Containers):如vector、list、deque、set、map等,它们是存储数据的结构,提供了动态管理内存的能力。例如,vector是一种动态数组,可以在其末尾快速添加元素;list则由双向链表构成,支持快速插入和删除...
- **容器**:STL提供了多种容器,如`vector`、`list`、`deque`、`set`、`map`等,它们用于存储和管理对象集合。其中,`vector`是最常用的动态数组,支持随机访问和高效插入/删除操作;`list`则是一组双向链表,适合...
1. 容器:STL的核心组成部分之一,它们是数据结构的模板类,如vector(动态数组)、list(双向链表)、deque(双端队列)、set(集合)、map(映射)和unordered_map(无序映射)等。每个容器都有其特定的内存管理和...
STL的学习不仅仅是理解这些基本概念,还包括深入理解其内部实现机制,例如容器如何管理内存,迭代器如何工作,以及算法的效率分析等。通过实践和应用,开发者可以更好地利用STL提高代码的效率和可读性。
容器是STL中最基础也是最重要的组成部分之一,它们用来存储数据。STL提供了多种类型的容器,每种容器都有其特定的应用场景和特点。 - **`vector`**:动态数组,能够根据需要自动调整大小。它支持随机访问,并且在...