方法1:順序周遊
list與vector不同,不支援随機通路和數組下标通路。
int start = 0, end = 2;//需要交換的兩個元素位置
CadEntities *p = CADSHAREDDATA->getCadEntities();
list<list<CadPolyline>>::iterator iter1;
list<list<CadPolyline>>::iterator iter2;
list<CadPolyline> temp;
int k = 0;
for (list<list<CadPolyline>>::iterator iter = p->_polylines.begin(); iter != p->_polylines.end(); ++iter, ++k) //周遊
{
if (k == start)
{
iter1 = iter;
}
if (k == end)
{
iter2 = iter;
}
}
//交換值
temp = *iter1;
*iter1 = *iter2;
*iter2 = temp;
方法2:借助疊代器函數
STL 中有用于操作疊代器的三個函數模闆,它們是:
advance(p, n):使疊代器 p 向前或向後移動 n 個元素。
distance(p, q):計算兩個疊代器之間的距離,即疊代器 p 經過多少次 + + 操作後和疊代器 q 相等。如果調用時 p 已經指向 q 的後面,則這個函數會陷入死循環。
iter_swap(p, q):用于交換兩個疊代器 p、q 指向的值。
#include <list>
#include <iostream>
#include <algorithm> //要使用操作疊代器的函數模闆,需要包含此檔案
using namespace std;
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
list <int> lst(a, a+5);
list <int>::iterator p = lst.begin();
advance(p, 2); //p向後移動兩個元素,指向3
cout << "1)" << *p << endl; //輸出 1)3
advance(p, -1); //p向前移動一個元素,指向2
cout << "2)" << *p << endl; //輸出 2)2
list<int>::iterator q = lst.end();
q--; //q 指向 5
cout << "3)" << distance(p, q) << endl; //輸出 3)3
iter_swap(p, q); //交換 2 和 5
cout << "4)";
for (p = lst.begin(); p != lst.end(); ++p)
cout << *p << " ";
return 0;
}
程式的輸出結果是:
1) 3
2) 2
3) 3
4) 1 5 3 4 2