在C++中,std::list是一個雙向鏈表容器,可以使用下標運算符 [] 來訪問和獲取元素,因為 std::list 不支持隨機訪問,因此需要使用迭代器來訪問和獲取元素。以下是詳細方法:
使用迭代器訪問和獲取元素:
(1)要訪問第 i 個元素,需要使用迭代器從頭開始遍歷鏈表 i 次。迭代器的更新方式為:++iterator
(2)獲取第 i 個元素的值,則可以使用迭代器的 std::advance 函數(shù)向前移動 i 個元素,并返回迭代器指向的元素。
std::list<int> mylist = {1, 2, 3, 4, 5};
auto iter = mylist.begin();
//訪問第3個元素
for (int i=0; i<3; ++i) {
++iter;
}
//獲取第3個元素的值
int val = *iter;
使用下標運算符[]訪問和獲取元素:
std::list 不支持直接使用下標運算符 [] 來訪問和獲取元素,因為在鏈表中,想要訪問第i個元素,需要從頭結(jié)點開始一步一步遍歷至第i個元素,這個過程需要時間復(fù)雜度為O(i)。如果長時間不重排元素,它的索引會失效,所以放它那個重心于迭代器的操作。
總之,由于std::list是一個鏈表容器,而不是一個 vector 等支持隨機訪問的容器,因此需要使用迭代器來訪問和獲取元素。使用迭代器的好處是,在插入和刪除元素后,迭代器指向的元素不會失效。