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, " "));
程序結果: