我無法理解以下行爲。當我使用currPMap
修改該值時,實際位置處的值不會被修改。爲什麼。別名未使用修改STL容器的實際內容
我檢查了參考operator[]
和at()
返回引用,所以這應該工作。
#include <iostream>
#include <vector>
#include <map>
using namespace std;
typedef map<int, int> intMap;
typedef map<int, int>::iterator mapIt;
int main(void) {
vector< map<int, intMap > > b(2);
int curr=0, next=1;
map<int, intMap> currPMap = b.at(curr);
(currPMap[4])[2] = 3; //modified by currPMap.
cout<<((b.at(curr))[4])[2]<<endl;
((b.at(curr))[4])[2] = 3; //modified using the actual vector.
cout<<((b.at(curr))[4])[2]<<endl;
}
輸出:
0
3
P.S:我知道我在做什麼在這裏可以通過此設置許多其他的方式來實現,但這並不是實際的程序。這只是我面對我的代碼的問題的明確版本。如果有人回答這種方法有什麼問題,我將不勝感激。
本網站說,在返回參考。 http://www.cplusplus.com/reference/map/map/at/ –
@AmanDeepGautam正是這樣,這就是爲什麼您可以將返回值分配給引用。但你正在複製。 – juanchopanza
我在這裏有點困惑。那麼爲什麼編譯器沒有顯示我所做的任何錯誤/警告消息。這是對的嗎。如果是,那麼怎麼做。(對評論中的問題抱歉) –