C++序列容器标准库笔记

C++序列容器标准库笔记

序列容器:vector,list,deque,提供对顺序表的表示和操作

通用

实例化:

vector/list/deque <数据类型> 标识符 (beg,end)
以地址beg开始,到地址end的数据序列为初值构造容器
vector/list/deque <数据类型> 标识符 (length,i)
实例化长度为length,置元素初值为i的向量
vector/list/deque <数据类型> 标识符 {a,b}
实例化含有两个元素的向量

添加元素:

函数功能
v.push_back(a)在容器末端插入元素a
v.insert(iter_pos,a)在迭代器所指位置插入元素a

删除元素:

函数功能
v.erase(iter_pos)删除迭代器所指位置的元素
v.erase(beg,end)删除以地址beg开始,到地址end结束的元素
v.pop_back()删除容器末端的元素
v.clear()清除所有元素

容器元素位置相关:

函数功能
v.begin()返回指向首元素的迭代器
v.end()返回指向尾元素下一位置的迭代器
v.rbegin()返回指向逆向首元素的迭代器
v.rend()返回逆向尾元素下一位置的迭代器

容器元素个数相关:

函数功能
v.size()返回容器的元素个数,无符号型
v.empty()判断容器是否为空
v.max_size()返回容器可容纳元素的最大数量

特有

Vector容器:

函数功能
v[i]访问第i个元素
v.at(i)访问第i个元素,不检查下标
#include<iostream>
#include<vector>
using namespace std;
int main()
{
	const int size = 5;
	int a[size] = { 1,20,3,40,5 };
	vector<int> V(a, a + size);//实例化

	cout << "using V[i]:";
	for (int i = 0; i < size; i++)
		cout << V[i] << " ";//V[i]访问元素
	cout << endl;

	V.push_back(2);//向尾部加入元素
	vector<int>::iterator itr = V.begin();//将迭代器指向首元素
	V.insert(itr+3, 30);//

	cout << "using V.at():";
	for (int i = 0; i < int(V.size()); i++)
		cout << V.at(i) << " ";//V.at()访问元素
	cout << endl;

	V.pop_back();
	V.erase(itr);

	cout << "using itr:";
	for (itr = V.begin(); itr != V.end(); itr++)
		cout << *itr << " ";//用迭代器访问元素
	cout << endl;

	cout << "The last element(using rbegin()) is:";
	cout << *(V.rbegin()) << endl;
	cout << "The last element (using end()) is:";
	cout << *(V.end() - 1) << endl;
	cout << "The first element (using rend()) is:";
	cout << *(V.rend() - 1) << endl;
}

代码结果

List容器:

函数功能
v.push_front(a)在容器始端插入元素a
v.pop_front()删除容器开端的元素
v.sort()排列v.sort()默认升序排列,如果降序要传入函数参数
v.unique()删除重复元素,要sort()后才使用
v.merge(v1)将v1的元素并入v中,v1,v都要经过排序才行。且v1中的元素为空
v.splice(itr,v1)将v1的所有元素剪切到v中itr所指位置
v.splice(itr,v1,itr1)将v1的itr1位置的元素剪切到v的itr开始的位置
v.splice(itr,v1,itr1,itr1_)将v1的itr1位置到itr1_位置的元素剪切到v的itr开始的位置
v.reverse()逆转v中元素次序
#include<iostream>
#include<list>
using namespace std;
class Test {
private:
	int a;
	int b;
public:
	Test(int a_, int b_) :a(a_), b(b_) {};
	friend bool operator < (Test& t1, Test& t2) {
		return t1.a < t2.a;
	} //重载运算符才能非基本类型排序
	friend bool operator == (Test& t1, Test& t2) {
		return t1.a == t2.a;
	}//用于unique
	friend bool inorder(Test& t1, Test& t2);
	void show() {
		cout << "a:" << a << " b:" << b;
	}
};
bool inorder(Test& t1, Test& t2) { return t1.a > t2.a; }//能传入sort()作参数进行降序排序

int main()
{
	list<Test> L1;
	L1.push_back(Test(1, 11));
	L1.push_back(Test(5, 33));
	L1.push_back(Test(4, 20));
	L1.push_back(Test(3, 55));
	L1.push_back(Test(2, 30));
	L1.push_back(Test(2, 2));
	list<Test>::iterator itr = L1.begin();//迭代器
	for (; itr != L1.end(); itr++)
	{
		itr->show();
		cout << endl;
	}
	L1.sort(inorder);
	cout << "\nafter sort():\n";
	for (itr = L1.begin(); itr != L1.end(); ++itr)
	{
		itr->show();
		cout << endl;
	}
	L1.unique();
	cout << "\nafter unique():\n";
	for (itr = L1.begin(); itr != L1.end(); itr++)
	{
		itr->show();
		cout << endl;
	}
	L1.sort();  // 一定要升序才能合并
	list<Test> L2;
	L2.merge(L1);//将L1的元素传入L2,同时L1的元素清空
	cout << "\nL1 go to L2:\n";
	for (itr = L2.begin(); itr != L2.end(); ++itr)
	{
		itr->show();
		cout << endl;
	}
	cout << "\nL1 is empty? ";
	if (L1.empty())
		cout << "Yes" << endl;
	else cout << "NO" << endl;//判断L1是否有元素
	list<Test>::iterator itr2 = L2.begin();
	itr = L1.begin();
	for (int i = 0; i < 3; i++)
		++itr2;
	L1.splice(itr,L2,itr2);
	cout << "\nL1 has something from L2 by splice:\n";
	for (itr = L1.begin(); itr != L1.end(); ++itr)
	{
		itr->show();
		cout << endl;
	}
	cout << "\nL2 has:\n";
	for (itr2 = L2.begin(); itr2 != L2.end(); ++itr2)
	{
		itr2->show();
		cout << endl;
	}
}

在这里插入图片描述

deque容器:

函数功能
v.push_front(a)在容器始端插入元素a
v.pop_front()删除容器开端的元素
v[i]访问第i个元素
v.at(i)访问第i个元素,不检查下标
#include<iostream>
#include<deque>
using namespace std;
int main()
{
	deque<int> D{ 10,2,5 };
	D.push_back(25);
	D.push_front(1);
	for (int i = 0; i<int(D.size()); i++)
		cout << D[i] << " ";
	cout << endl;
	for (int i = 0; i<int(D.size()); i++)
		cout << D.at(i) << " ";
	cout << "\nThe first element is:" << *(D.begin());
	cout << "\nThe last element is:" << *(D.end() - 1);
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值