IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> C++——顺序容器 -> 正文阅读

[系统运维]C++——顺序容器

vector(动态数组)

基本操作

#include<iostream>
#include<vector>
using namespace std;
template<class T>
void PrintVector(T s,T e){
	for(;s!=e;s++){
		cout<<*s<<" ";
	}
	cout<<endl;
}
int main(){
	int a[5]={1,2,3,4,5};
	vector<int> v(a,a+5);
	cout<<v.end()-v.begin()<<endl;//随机访问迭代器可以相减,此处输出的是vector元素个数
	v.insert(v.begin()+2,13);//如果用insert插入,需要标明(插入位置,插入内容)
	v.erase(v.begin()+2);//删除位于begin()+2的元素
	vector<int> v2(4,100);//新的初始化,v2有4个元素,都是100
	v2.insert(v2.begin(),v.begin()+1,v.begin()+3);//insert(插入位置,插入区间起点,插入区间重点)
	v.erase(v.begin()+1,v.begin()+3);//删除一整段区间
    PrintVector(v2.begin(),v2.end());
}

vector构建二维数组

#include<iostream>
#include<vector>
using namespace std;
int main(){
	vector<vector<int> > v(3);
	//v有3个元素,每个元素都是vector<int> 容器
	for(int i=0;i<v.size();i++){
		for(int j=0;j<4;j++){
			v[i].push_back(j);
		}
	}
	for(int i=0;i<v.size();i++){
		for(int j=0;j<v[i].size();j++){
			cout<<v[i][j]<<" ";
		}
		cout<<endl;/*输出
		0 1 2 3
		0 1 2 3
		0 1 2 3*/
	}
}

外层循环都是小于v.size();内层的读入和输出都需要额外注意

deque(双向队列)

所有适用于vector的操作都适用于duque

  • deque还有push_front(将元素插入到前面)
  • 还有pop_front(删除最前面的元素)
  • 复杂度均为常数时间O(1)

list(双向链表)

  • 在任何位置插入删除都是常数时间

  • 不支持随机存取

  • 除具有所有顺序容器都有的成员函数以外,还支持8个成员函数

/*push_front:在前面插入
pop_front:删除前面的元素
sort:排序(list不支持STL的算法sort)
remove:删除和指定值相等的所有元素
unique:删除所有和前一个元素相同的元素
       要做到元素不重复,则unique之前还需要sort
merge:合并两个链表,并清空被合并那个
reverse:颠倒链表
splice:在指定位置前面插入另一链表中的一个或多个元素,并在另一链表中删除被插入元素*/

操作实例

#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
class A{
	private:
	int n;
	public :
		A(int n_){n=n_;}
		friend bool operator<(const A & a1,const A & a2);
		friend bool operator==(const A & a1, const A & a2);
		friend ostream & operator <<( ostream & o,const A & a);
};
bool operator<(const A & a1,const A & a2){
	return a1.n<a2.n;
}
bool operator==(const A & a1, const A & a2){
	return a1.n==a2.n;
}
ostream & operator <<( ostream & o,const A & a){
	o<<a.n;
	return o;
}
template <class T>
void PrintList(const list<T> & lst){
	//这里的参数是不推荐的写法,模板里引入list——还是传入两个迭代器,一个起点,一个终点作为参数更好
	typename list<T>::const_iterator i;
	i=lst.begin();
	for(i=lst.begin();i!=lst.end();i++){
		cout<<*i<<",";
	}
}//typename用来说明list<T>::const_iterator是个类型,在vs中不写也可以
int main(){
	list<A> lst1,lst2;
	lst1.push_back(1);lst1.push_back(2);lst1.push_back(3);lst1.push_back(3);lst1.push_back(4);
	lst1.push_back(2);
	//此处,每个list都是classA对象,但是可以push_back一个常数
	//是因为 class里面写了自动转换类型的函数,可以将整数转换成classA对象
	lst2.push_back(10);lst2.push_back(20);lst2.push_back(50);lst2.push_back(30);
	lst2.push_back(30);lst2.push_back(40);lst2.push_back(40);//后置插入
	cout<<"1.";PrintList(lst1);cout<<endl;
	cout<<"1.";PrintList(lst2);cout<<endl;
	lst2.sort();//排序!(list的排序,不可以使用STL的sort()函数)
	cout<<"1)";PrintList(lst2);cout<<endl;
	lst2.pop_front();//删除最前面的元素
	cout<<"2)";PrintList(lst2);cout<<endl;
	lst2.reverse();//反转链表成员函数
	cout<<"3)";PrintList(lst2);cout<<endl;
	lst2.remove(30);//删除所有和A(2)相等的元素
	cout<<"4)";PrintList(lst2);cout<<endl;
	lst2.unique();//删除所有和前一个元素相等的元素
	cout<<"5)";PrintList(lst2);cout<<endl;
	lst1.merge(lst2);//合并lst2到lst1,并且会清空lst2
	cout<<"6)";PrintList(lst1);cout<<endl;
	lst2.push_back(100);lst2.push_back(200);lst2.push_back(300);lst2.push_back(400);
	list<A>::iterator p1,p2,p3;
	p1=find(lst1.begin(),lst1.end(),3);
	p2=find(lst2.begin(),lst2.end(),200);
	p3=find(lst2.begin(),lst2.end(),400);//find()是algorithm的函数,返回的是指向找到元素的迭代器
	lst1.splice(p1,lst2,p2,p3);
	//将lst2的[p2,p3)插入到p1之前,并从lst2中删除[p2,p3);
	cout<<"7)";PrintList(lst1);cout<<endl;
	cout<<"8)";PrintList(lst2);cout<<endl;
	return 0;
}
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 21:08:06  更:2022-02-09 21:08:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 5:47:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码