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