C++STL相关容器知识(顺序类容器)

C++程序格式(以后不管什么就是这个格式)

#include<bits/stdc++.h>
using namespace std;
int main()
{
	********
	具体代码部分
	********
	return 0;
}

Vector

需要导入头文件#include <vector>,不过使用C++万能头文件的话,可以不使用相关容器的头文件,c++万能头文件:#include<bits/stdc++.h>
如果没有指定元素的初始化式,那么标准库将自行提供一个元素初始值进行,具体值为何,取决于存储在vector 中元素的数据类型;如果为int型数据,那么标准库将用 0 值创建元素初始化式;如果 vector 保存的是含有构造函数的类类型(如 string)的元素,标准库将用该类型的默认构造函数创建元素初始化式;元素类型可能是没有定义任何构造函数的类类型。这种情况下,标准库仍产生一个带初始值的对象,这个对象的每个成员进行了值初始化。

  • 初始化:
//初始化一个int类型的vector数组
vector<int>vec0;
//初始化一个char类型型的vector数组
vector<char>vecc;
//初始化10个元素均为0 (默认为0)
vector<int>vec1(10);
//初始化10个元素均为4
vector<int>vec2(10,4);
//初始化10个string元素字符串均为hello
vector<string>vec3(10,"hello");
  • 基本操作
//使用size()可以获得vector元素的个数
int length=vec1.size();
//使用empty()可以获得vector元素是否为空
bool isEmpty=vecc.empty();
//insert(a,b,c)在a位置插入b个c
vec0.insert(vec0.begin(),5,3);
//pop_back()用于删除末尾元素
vec0.pop_back();
//用push_back()用于添加一个元素
vec1.push_back(100);    
//输出vector的第一个元素
cout<<vec0[1]<<endl;
//erase(a,b)删除a-b之间的所有元素,其他元素前移
vec3.erase(++vec3.begin(),--vec3.end());
//判断两个vector是否相等
cout<<(vec1==vec2)?true:false;  
//清空元素
vec1.clear();   
//获取迭代器首地址
vector<string>::iterator iter=vec3.begin(); 
//获取const类型迭代器的首地址
vector<int>::const_iterator c_iter = vec1.begin(); 
  • 遍历方法
//下标法(vector容器的特有访问方法,一般容器只能通过迭代器访问)
int length = vec1.size();
for(int i=0;i<length;i++)
{
   cout<<vec1[i];
}
cout<<endl<<endl;

//迭代器法(所有容器通用的遍历方法)
vector<int>::const_iterator iterator = vec1.begin();
for(;iterator != vec1.end();iterator++)
{
   cout<<*iterator;
}

deque

deque容器类与vector类似,支持随机访问和快速插入删除,它在容器中某一位置上的操作所花费的是线性时间。与vector不同的是,deque是双端数组,而vector是单端的,deque还支持从开始端插入数据:push_front()。其余类似vector操作方法的使用。

deque<int>de1;
de1.push_back(1);
de1.push_front(4);
de1.push_back(3);
最终结果是413

List

  • 定义与初始化
//声明一个空的int类型的list
list<int>list1;
//声明一个长度为3的int类型的list,默认为0
list<int>list2(3);
//声明一个长度为3的int类型的list,值均为2
list<int>list3(3,2);
//声明一个int类型的list,以list2的值初始化
list<int>list4(list2);
//与上句功能一样
list<int>list5(list2.begin(),list2.end());
  • 常用操作方法
//往list1中插入元素10
list1.push_back(10);
//给list分配值,其值为list2的所有值,与用list2初始化list1操作很类似
list1.assign(list2.begin(),list2.end());
//从list1中删除一个元素
list1.pop_back();
//清空list1
list1.clear();
//声明一个list1的begin迭代器
list<int>::const_iterator iter_begin=list1.begin();
//判定list1是否为空
bool isEmpty=list1.empty();
//list1.back()返回list1的最后一个元素(就是数字本身,不是引用,也不是迭代器)
cout<<list1.back()<<endl;
//list1.front()返回list1的第一个元素(就是数字本身,不是引用,也不是迭代器)
cout<<list1.front()<<endl;
//insert(a,b,c)从a位置起插入b个c
list1.insert(list1.begin(),3,2); 
//rbegin()返回的是相当于末尾元素的指针(注意是指针,需要用*来获取其指向的值) 
cout<<"rbegin() is "<<*list1.rbegin()<<endl;
//删除所有的值为2的元素
list1.remove(2); 
//list反转reverse() 
list1.reverse();
//sort()排序,默认是升序排序
list1.sort();
//size()为list所包含的元素个数
cout<<list1.size()<<endl;
//删除list中的重复元素
list1.unique();
  • 迭代遍历
//除了vector能使用下标遍历以外,其他的容器都只能使用迭代器来使用
for(list<int>::const_iterator iter=list1.begin();iter!=list1.end();iter++){
		cout<<*iter<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值