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, " "));

程序結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章