vector、list的常用成员函数及其返回值

1. vector常用成员函数

vctor常用的成员函数,总结一下,方便应用,重要的是明白各个成员函数的参数和返回值,返回值尤其重要,且容易被忽略

vector容器类成员及成员方法对应的含义与返回值
vector::size_type一个无符号整数类型
vector::difference_type一个有符号整数类型
vector::iterator可变的随机类型迭代器类型,支持随机索引
vector::reverse_iterator用于逆向遍历的一种随机迭代器类型
iterator vector::begin()成员方法,返回一个vector容器首元素的迭代器
iterator vector::end()返回一个vector容器最后一个元素后面的迭代器
reverse_iterator vector::rbegin()返回被倒转的vector容器首元素的迭代器
reverse_iterator vector::rend()返回被倒转的vector容器尾元素的后面的迭代器
size_type vector::size()返回 vector容器中元素的个数(size_type)类型
bool vector::empty()判断vector容器是否为空,为空则返回true
reference vector::operator[ ](size_type n)返回容器的第n个元素,返回的是元素的引用,可以修改其值,而且vector容器的下标类型是size_type类型
vector::vector(const vector &v)拷贝构造函数
vector ::vector(size_type n ,const T & x)构造函数,初始化一个含有 n个x的vector容器
void vector::swap(vector &v)将两个vector的内容互换
reference vector::front()返回第一个元素,引用形式
reference vector::back()以引用形式返回最后一个元素
void vector::push_back(const T& x)在vector尾部添加x
void vector::pop_back()移除最后一个元素,无返回值
iterator vector::insert(iterator pos,const T&x)在pos位置之前插入元素x,返回指向这个元素的迭代器
void vector::insert(iterator pos,size_type n ,const T&x))在pos位置插入n个x的复制品
InputIterator任意类型迭代器;void vector::insert(iterator pos,InputIterator f,InputIterator l)在pos之前插入[f,l)
iterator vector::erase(iterator pos)删除迭代器pos位置处的元素,返回下一个元素的迭代器位置,如果删除最后一个元素,则会返回 vector::end()迭代器
void vector::clear()删除vector所有元素

2list常用成员函数

list 是双向链表,每一个节点都有相应的前驱与后继,可以从左到右,也可以从右到左

list容器除了具有和上面vector容器类似的成员方法外,它还有以下成员方法:

list容器额外的成员方法方法的参数、返回值和意义
void list::splice(iterator pos,list &x)将另外一个不同的list容器中的内容删除的同时插入到当前list容器的pos位置前,注意,当前容器与x容器必须为不同的链表容器
void list::splice(iterator pos,list &x, iterator i)将x容器中i位置的元素移到当前容器的pos位置前,x与当前容器可以为相同的容器
void list::splice(iterator pos, list &x,iterator f, iterator l)将x容器中[f,l)位置的元素移到当前容器的pos位置前

例子说明如下(主要看程序结果):

list<int> L1;
	L1.push_back(2);
	L1.push_back(0);
	L1.push_back(1);
	L1.push_back(9);

	list<int> L2;
	L2.push_back(8);
	L2.push_back(8);
	L2.push_back(8);
	L2.push_back(8);

	cout << "输出两个list中的内容到屏幕上" << endl;
	cout << "L1 = ";
	copy(L1.begin(), L1.end(), ostream_iterator<int>(cout," "));
	cout << endl;
	cout << "L2 = ";
	copy(L2.begin(), L2.end(), ostream_iterator<int>(cout, " "));
	cout << endl;

	cout << "将L2删除,并将其内容拷贝到L1的末尾" << endl;
	cout << "L1 = ";
	L1.splice(L1.end(),L2); //第一种形式的list::splic(iterator pos,list& x)
	copy(L1.begin(), L1.end(), ostream_iterator<int>(cout, " "));
	cout << endl;
	
	cout << "L2.size() = "<< L2.size()<<endl;

	cout << "因为L2中元素已经删除(L2这个容器还存在),所以我们可以将L1中的首元素移到L2中" << endl;
	//第二中形式的list::splice(iterator pos, list &x,iterator i)
	cout << "将L1中首元素移到L2中后L2 = ";
	L2.splice(L2.begin(),L1,L1.begin());
	copy(L2.begin(), L2.end(), ostream_iterator<int>(cout, " "));//输出结果为2
	cout << endl;
	cout << "此时L1 = ";
	copy(L1.begin(), L1.end(), ostream_iterator<int>(cout, " "));//因为已经将L1中的首元素2移到到了L2中,所以输出结果中没有2
	cout << endl;

	cout << "第三种形式的类似" << endl;
	cout << "将L1中所有元素插入待L2首元素前面后L2 = ";
	L2.splice(L2.begin(), L1, L1.begin(),L1.end());
	copy(L2.begin(), L2.end(), ostream_iterator<int>(cout, " "));
	cout << endl;

在这里插入图片描述

void list::remove(const T& val)从list容器中删除所有与val值相等的元素
void list::remove_if (Predicate p)Predicate p表示p是一个一元谓词(一元函数对象,类中重载了函数调用操作符()),即参数只有一个,且返回值是bool类型,移除所有使得p(*iterator)为true的元素 *iterator ,该成员方法的迭代器会自动遍历,来看看是否符合条件
list<int> L1;
L1.push_back(2);
L1.push_back(0);
L1.push_back(1);
L1.push_back(9);
class P 
{
public:
	bool operator()(int i)
	{
		if (i > 3)
		{
			return true;
		}
		return false;
	}
};
P p;//函数对象,仿函数
L1.remove_if(p);//L1的迭代器iterator 会自动套用 p(*iterator), p(*iterator)的返回值为true,则删除该元素
//L1.remove_if(P());//产生的匿名函数对象
copy(L1.begin(), L1.end(), ostream_iterator<int>(cout, " "));

最后结果:删除了L1中大于3的元素9
在这里插入图片描述

void list::unqiue()移除等值元素所形成的相邻群组中第一个以外 的元素,一般要求list容器按顺序排列
void list::unqiue(BinaryPredicate p)参数为二元谓词,有两个参数且返回值为bool类型的函数对象,移除list容器中所有的等值元素,不过这里的等值概念可以自己 通过二元谓词p来设计,只要使得 p(*iterator1,*iterator2) 返回值为true即可,一般也要求list容器按顺序排列
void list::merge(list & x)将两个已经排好序的lists合并,即删除x中的元素然后插入到该list中,插入过程还是按顺序找寻插入位置的
void list::reverse()逆转链表各元素的顺序,倒置
void list::sort()根据operator<将*this排序,排序算法是稳定的
void list::sort(BinaryPredicate comp)根据二元谓词的返回值是否为true来进行排序
class comp  //仿函数,二元函数对象
	{
	public:
		bool operator()(int & i,int &j)
		{
			if (i > j)//返回true,表示按降序排列
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	};

L1.push_back(2);
L1.push_back(0);
L1.push_back(1);  
L1.push_back(9);
L1.push_back(6);
L1.push_back(10);
L1.push_back(5);
L1.push_back(3);

L1.sort();//默认升序排列
copy(L1.begin(), L1.end(), ostream_iterator<int>(cout, " "));
cout << endl;
L1.sort(comp()); //自己定义的二元谓词,降序排列
copy(L1.begin(), L1.end(), ostream_iterator<int>(cout, " "));

程序结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值