我需要循環槽內部容器的內容,但是,讓我訪問它是恆定的唯一方法:如何從std :: stack <T,std :: vector <T>>獲取非const迭代器?
const _Container& _Get_container() const
{ // get reference to container
return (c);
}
所以我只能從內部向量的開始()得到常量迭代器有沒有辦法解決這個問題?
我需要循環槽內部容器的內容,但是,讓我訪問它是恆定的唯一方法:如何從std :: stack <T,std :: vector <T>>獲取非const迭代器?
const _Container& _Get_container() const
{ // get reference to container
return (c);
}
所以我只能從內部向量的開始()得到常量迭代器有沒有辦法解決這個問題?
不,沒有這樣的方式。 std::stack
(和類似的適配器)背後的想法是,您將只有使用堆棧接口。而通用棧只允許檢查頂層元素。
所以技術上,你不想要一個「堆棧」,你想要一個「可迭代堆棧」。標準庫不提供一個容器/適配器,所以你不得不求助於
使用一個普通的容器實現自己的
和維護類棧接入的一個手動
附註:我真的希望實際提供的迭代功能的適配器;畢竟,他們只有適配器,,所以他們保證由一個適當的容器支持(或者只要支持容器,他們至少可以提供迭代)。但它目前不是標準的一部分。
您可以使用const_iterator
來遍歷元素,只是無法修改它們。
如果您確實想要修改對象,則無法調用未定義的行爲 - 修改聲明爲const
的對象是非法的。
爲什麼你需要一個'iterator'來迭代元素? – juanchopanza
如果它返回一個'const'引用,那麼他們不希望你修改內部容器,所以他們也不希望你使用非'const'迭代器到那個容器。 –
我需要製作一個迭代所有堆棧元素並對它們執行一些操作的「映射」函數,因此我需要迭代內部向量 –