std::map<int, Obj> mp;
// insert elements into mp
// case 1
std::map<int, Obj> mp2;
mp2 = std::move(mp);
// case 2
std::map<int, Obj> mp3;
std::move(std::begin(mp), std::end(mp), std::inserter(mp3, std::end(mp3));
我對這兩種情況感到困惑。它們完全一樣嗎?
uj5u.com熱心網友回復:
它們完全一樣嗎?
不,他們不是!
第一個呼叫移動建構式的的4和移動操作將在類/資料結構水平來完成。std::map
[...]
- 移動建構式。在容器移動構造 (
overload (4)) 之后,指向 other 的參考、指標和迭代器(結束迭代器除外)仍然有效,但參考現在位于*this. 當前標準通過container.requirements.general 中的一攬子宣告做出此保證,并且正在考慮通過LWG 2321提供更直接的保證
復雜
4 )常數。如果給定 alloc 和
alloc != other.get_allocator(),則為線性。
第二個std::move是從<algorithm>header,它做元素明智的(即鍵值對)移動到另一個地圖。
- 將范圍內的元素移動
[first, last)到從 開始的另一個范圍d_first,從第一個開始并繼續到最后一個 - 1。在此操作之后,移動范圍中的元素仍將包含適當型別的有效值,但不一定是相同的值和之前一樣。
復雜
準確地
last - first移動任務。
uj5u.com熱心網友回復:
不,它們不一樣。
- 情況 1 一次移動整體的內容
map。所述map的內部指標(多個)‘移動’到mp2-沒有所述的pair在地圖s的影響。 - 案例 2
pair在地圖中一個一個地移動個體。請注意,map關鍵s為const使他們不能移動,但反而被復制。mp仍將包含與以前一樣多的元素 - 但值處于不確定狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/368069.html
標籤:C C 11 移动 标准映射 c -standard-library
下一篇:模板引數與函式引數
