2014-01-27 152 views
-1

我需要循環槽內部容器的內容,但是,讓我訪問它是恆定的唯一方法:如何從std :: stack <T,std :: vector <T>>獲取非const迭代器?

const _Container& _Get_container() const 
    { // get reference to container 
    return (c); 
    } 

所以我只能從內部向量的開始()得到常量迭代器有沒有辦法解決這個問題?

+0

爲什麼你需要一個'iterator'來迭代元素? – juanchopanza

+0

如果它返回一個'const'引用,那麼他們不希望你修改內部容器,所以他們也不希望你使用非'const'迭代器到那個容器。 –

+0

我需要製作一個迭代所有堆棧元素並對它們執行一些操作的「映射」函數,因此我需要迭代內部向量 –

回答

2

不,沒有這樣的方式。 std::stack(和類似的適配器)背後的想法是,您將只有使用堆棧接口。而通用棧只允許檢查頂層元素。

所以技術上,你不想要一個「堆棧」,你想要一個「可迭代堆棧」。標準庫不提供一個容器/適配器,所以你不得不求助於

  1. 使用一個普通的容器實現自己的

  2. 和維護類棧接入的一個手動


附註:我真的希望實際提供的迭代功能的適配器;畢竟,他們只有適配器,,所以他們保證由一個適當的容器支持(或者只要支持容器,他們至少可以提供迭代)。但它目前不是標準的一部分。

4

您可以使用const_iterator來遍歷元素,只是無法修改它們。

如果您確實想要修改對象,則無法調用未定義的行爲 - 修改聲明爲const的對象是非法的。

相關問題