簡體   English   中英

使用std :: map const_iterator更改/更新值

[英]Change/update value using std::map const_iterator

我只是想知道我是否可以使用const_iterator更改/更新地圖的值。

下面是代碼片段:

int main()
{
    map <int, int> m;
    m.insert(make_pair(1, 10));

    map <int, int>::const_iterator itr = m.begin(); //The iterator is const_iterator
    itr->second = 30;

    cout << itr->second; //The value to be printed is 30, and not 10.
    return 0;
}

預先感謝您分享您的想法。

const_iterator的全部要點是它不能用於修改容器。 所以不行。

我可以使用const_iterator更改/更新地圖的值嗎?

不行

由於某種原因,它稱為const迭代器。 如所提到的在這里 ,A const_iterator是指向常量的值(如一個迭代器const T*指針); 取消引用將返回對常量值( const T& )的引用,並防止修改引用的值:它強制執行const -correctness

編譯器不應允許通過const_iterator修改map的內容。

itr->second = 30;

應該報告為錯誤。 如果您的編譯器允許該行,則說明它不符合標准。 Perhaphs允許通過允許標准不兼容行為的標志來編譯該行。

使用g ++,出現以下錯誤。

socc.cc: In function ‘int main()’:
socc.cc:12:19: error: assignment of member ‘std::pair<const int, int>::second’ in read-only object
     itr->second = 30;

const迭代器被認為可以防止用戶通過任何方式更改/修改值。

無法通過構造器更改元素。 這是const迭代器與非const迭代器之間最重要的區別。

std::map::begin返回一個非常量迭代器(假設對象操作數為非常量),因此無需首先使用常量迭代器。

但是,如果由於某種原因(在示例中未演示),您只能具有const迭代器,但可以對容器進行非const訪問,則可以將非const迭代器獲取到const迭代器指向的元素。 這可以通過使用以下技巧來實現,該技巧看起來像個把戲:

map <int, int>::iterator mutable_itr = m.erase(itr, itr);

它不會刪除任何內容,因為[itr, itr)是一個空范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM