2013-04-16 84 views
2

這是一個非常基本的。修改STL容器的內容是否安全?

我記得在某處發現了一個警告(我現在無法找到它),因爲它不應該直接修改STL容器的內容,因爲它可能會對容器的內部記錄造成嚴重破壞。從那以後,你應該使用類似boost的ptr_containers的東西,只要你有一個你想修改的元素。

這是基本上所有我想做的事:

int main (int argc, char *argv[]) { 
    std::vector<int> jambone; 

    jambone.push_back(2); 
    jambone.front() = 4; 
    std::cout<< jambone.front(); 
} 

我不想做任何多線程或任何幻想在這裏。這應該沒問題吧? 如果它是一個充滿對象的容器,那麼它會有什麼不同嗎?我在其中之一上調用了一個增變器?

+0

你是指什麼樣的修飾?人們總是以C數組的形式傳遞向量。 – chris

回答

6

我想你混淆有關更新容器兩件事情:

  1. std::set是不是安全更新的值,因爲這將改變不變(見what happens when you modify an element of an std::set?

  2. 對於一些集裝箱 - 尤其是std::vector - 如果您的操作(例如push_back)使迭代器失效,並且您正在使用操作前獲得的迭代器,則必須小心。

隨着你的情況,我沒有看到你正在做什麼的問題。

+0

哦,這確實更有意義!我打算把這個問題公開幾分鐘以確保,但是我認爲你已經對其衆所周知的頭腦發表了諺語。謝謝! –

+0

這個答案很好。請注意,'vector :: push_back'可能會使迭代器*和*指向其成員的指針失效。 –