dedecms 遷移 wordpressseo優(yōu)化工作內(nèi)容做什么
?list容器
頭文件:#include<list>
- list是一個(gè)雙向鏈表容器,可高效地進(jìn)行插入刪除元素
- list不可以隨機(jī)存取元素,所以不支持at.(pos)函數(shù)與[]操作符
注:list使用迭代器訪問(wèn)數(shù)據(jù)時(shí)可以一步一步走自增自減(即it++)不允許跨太多步去訪問(wèn)元素
? ? ? ? list容器是可以進(jìn)行遍歷的,即進(jìn)行數(shù)據(jù)訪問(wèn)時(shí)不會(huì)進(jìn)行刪除操作
list頭尾的添加移除操作
- list.push back(elem); //在容器尾部加入一個(gè)元素
- list.pop _back(); //刪除容器中最后一個(gè)元素
-?list.push front(elem); //在容器開(kāi)頭插入一個(gè)元素
- list.pop_front(); //從容器開(kāi)頭移除第一個(gè)元素
list的數(shù)據(jù)存取
?list.front();//返回第一個(gè)元素。
list.back(); //返回最后一個(gè)元素。
list與迭代器
- list 容器的迭代器是“雙向迭代器”:雙向迭代器從兩個(gè)方向讀寫(xiě)容器。除了提供前向迭代器的全部操作之外,雙向迭代器還提供前置和后置的自減運(yùn)算。
- list.begin(); //返回容器中第一個(gè)元素的選代器
- list.end(); //返回容器中最后一個(gè)元素之后的迭代器
- list.rbegin(); //返回容器中倒數(shù)第一個(gè)元素的選代器
- list.rend(); //返回容器中倒數(shù)最后一個(gè)元素的后面的選代器
示例1:list與正向迭代器
#include<iostream>
#include<list>
using namespace std;
int main() {list<int> lst;lst.push_back(10);lst.push_front(20);list<int>::iterator it;for (it = lst.begin(); it != lst.end(); it++) {cout << *it << ' ';}cout << endl;int a = lst.front();cout << "front:" << a << endl;int b = lst.back();cout << "back:" << b << endl;//修改容器末尾和首部的值lst.front() = 100;lst.back() = 200;a = lst.front();cout << "front:" << a << endl;b = lst.back();cout << "back:" << b << endl;
}
示例2:list與反向迭代器
#include<iostream>
#include<list>
using namespace std;
int main() {list<int> lst;lst.push_back(10);lst.push_front(20);list<int>::reverse_iterator it1;for (it1 = lst.rbegin(); it1 != lst.rend(); it1++) {cout << *it1 << ' ';}cout << endl;}
list對(duì)象的帶參數(shù)構(gòu)造
-?list(n,elem); //構(gòu)造函數(shù)將n個(gè)elem拷貝給本身
- list(beg,end); //構(gòu)造函數(shù)將[beg,end)區(qū)間中的元素拷貝給本身
- list(const list &lst); //拷貝構(gòu)造函數(shù)。
#include<iostream>
#include<list>
using namespace std;
int main() {list<int>::iterator it;list<int> lst(3, 5);for (it = lst.begin(); it != lst.end(); it++) {cout << *it << ' ';}cout << endl;list<int> lst2(lst.begin(),lst.end());//list<int> lst2(lst.begin(), lst.begin()+5);錯(cuò)誤for (it = lst2.begin(); it != lst2.end(); it++) {cout << *it << ' ';}cout << endl;int a[] = { 1,2,3,4,5 };list<int> lst3(a, a + 5);for (it = lst3.begin(); it != lst3.end(); it++) {cout << *it << ' ';}cout << endl;list<int> lst4(lst);for (it = lst4.begin(); it != lst4.end(); it++) {cout << *it << ' ';}cout << endl;
}
list的賦值
- list.assign(beg,end); //將[beg,end)區(qū)間中的數(shù)據(jù)拷貝賦值給本身。注意該區(qū)間是左閉右開(kāi)的區(qū)間。
- list.assign(n,elem); //將n個(gè)elem拷貝賦值給本身
- list& operator=(const list &lst); //重載等號(hào)操作符
- list.swap(lst); // 將lst與本身的元素互換。
示例:
#include<iostream>
#include<list>
using namespace std;
int main() {list<int> lst1,lst2;list<int> lst3 = { 1,2,3,4,5 };list<int>::iterator it = lst3.end();list<int>::iterator it2;lst1.assign(lst3.begin(), it);for (it2 = lst1.begin(); it2 != lst1.end(); it2++) {cout << *it2 << ' ';}cout << endl;cout << endl;lst2.assign(3, 5);for (it2 = lst2.begin(); it2 != lst2.end(); it2++) {cout << *it2 << ' ';}cout << endl;cout << endl;lst2 = lst1;for (it2 = lst1.begin(); it2 != lst1.end(); it2++) {cout << *it2 << ' ';}cout << endl;cout << endl;lst1.swap(lst2);for (it2 = lst1.begin(); it2 != lst1.end(); it2++) {cout << *it2 << ' ';}cout << endl;for (it2 = lst2.begin(); it2 != lst2.end(); it2++) {cout << *it2 << ' ';}cout << endl;}
list的大小
- list.size(); //返回容器中元素的個(gè)數(shù)
-?list.empty(); //判斷容器是否為空
- list.resize(num); //重新指定容器的長(zhǎng)度為num,若容器變長(zhǎng),則以默認(rèn)值填充新位置。如果容器變短,則末尾超出容器長(zhǎng)度的元素被刪除。
- list.resize(num,elem); //重新指定容器的長(zhǎng)度為num,若容器變長(zhǎng),則以elem值填充新位置。如果容器變短,則末尾超出容器長(zhǎng)度的元素被刪除。
list的插入
- list.insert(pos,elem)//在pos位置插入一個(gè)elem元素的拷貝,返回新數(shù)據(jù)的位置
- list.insert(pos,n,elem);//在pos位置插入n個(gè)elem數(shù)據(jù),無(wú)返回值
- list.insert(pos,beg,end);//在pos位置插入[beg,end)區(qū)間的數(shù)據(jù),無(wú)返回值
注:list進(jìn)行數(shù)據(jù)的插入時(shí)是沒(méi)有空間的釋放和位置的移動(dòng),因此不會(huì)出現(xiàn)迭代器失效的情況
list的刪除
- list.clear(); /X移除容器的所有數(shù)據(jù)
- list.erase(beg,end); //刪除[beg,end)區(qū)間的數(shù)據(jù),返回下一個(gè)數(shù)據(jù)的位置。
- list.erase(pos); //刪除pos位置的數(shù)據(jù),返回下一個(gè)數(shù)據(jù)的位置。
- lst.remove(elem); //刪除容器中所有與elem值匹配的元素。
list的反序排列
- lst.reverse(); //反轉(zhuǎn)鏈表,比如lst包含1,3,5元素,運(yùn)行此方法后,lst就包含5,3,1元素
Iist迭代器失效
- 刪除結(jié)點(diǎn)導(dǎo)致迭代器失效
刪除即是將相應(yīng)數(shù)據(jù)位置的元素地址釋放掉,即返還給內(nèi)部系統(tǒng),在某些編譯器中,該被釋放的地址是可以進(jìn)行訪問(wèn)并有明確復(fù)制(系統(tǒng)內(nèi)部賦值),該系統(tǒng)地址是沒(méi)有訪問(wèn)權(quán)限的,俗稱(chēng)野指針
示例:
#include<iostream>
#include<list>
using namespace std;
int main() {list<int> lst = { 1,2,1,4,5 };list<int>::iterator it;for (it = lst.begin(); it != lst.end();) {if (*it == 1) {it = lst.erase(it);}else it++;}for (it = lst.begin(); it != lst.end(); it++) cout << *it<<' ';
}