我尋找相同類型的問題,但我沒有找到我的問題的答案(存在的問題): 應該選擇什麼類型的鉤子來控制列表中的對象? 我在指針和迭代器之間搖擺不定。鉤住std :: list中的對象。指針或迭代器?
容器在開始時填充,不應在此之後調整容器大小。鉤子是我用來在用戶心血來潮的時候在我的對象之間切換的方式,並且在我的算法中只能操作一個變量。
在所有情況下,我必須通過一個迭代器來找到正確的對象。但是哪一個是最佳實踐/使用?
// 10 object list
std::list <Object> List(10);
std::list <Object>::iterator it = List.begin();
Object *pt = NULL;
// Select the 3rd object
advance(it, 3);
pt = &(*it);
// Access to object member...
it->member;
pt->member;
指針允許不訪問鄰居,與迭代器相反,但可能不安全。 什麼是最佳實踐?
與大多數標準容器不同,在'std :: list'中,除非相應的元素被擦除,否則迭代器永遠不會失效,所以它與原始指針一樣(非)安全,但是如您所說,能夠從當前項目開始迭代。由於迭代器是非常輕量級的對象,選擇其中任何一個都不會對性能產生任何影響,所以它真的取決於您。 – syam
如果容器在被填充後沒有被改變,並且考慮到你的例子中的訪問模式,你可以考慮使用一個你訪問的'std :: vector'變成'vec [3]',這會給你目的。 – ogni42