タグ付けされた質問 「push-back」


2
すでに構築されたオブジェクトに対するstd :: moveとemplace_back()を使用したC ++ 11 push_back()の効率
C ++ 11では、インプレース構築が可能であるemplace_back()ため、(効率の観点から)一般的に好まれますが、すでに構築されたオブジェクトで使用する場合も同様ですか?push_back()push_back(std::move()) たとえばemplace_back()、次のような場合でもまだ好まれますか? std::string mystring("hello world"); std::vector<std::string> myvector; myvector.emplace_back(mystring); myvector.push_back(std::move(mystring)); // (of course assuming we don't care about using the value of mystring after) さらに、上記の例には、代わりに次のような利点がありますか。 myvector.emplace_back(std::move(mystring)); または、ここでの移動は完全に冗長ですか、それとも効果がありませんか?

2
std :: vectorに追加するときのクラスフィールドの奇妙な動作
次の状況で、(clangおよびGCCで)非常に奇妙な動作が見つかりました。nodesクラスのインスタンスである1つの要素を持つベクトルがありますNode。次に、ベクターにnodes[0]新しい関数を追加する関数を呼び出しますNode。新しいノードが追加されると、呼び出し元オブジェクトのフィールドがリセットされます!ただし、関数が終了すると、通常の状態に戻ります。 これは最小限の再現可能な例だと思います: #include <iostream> #include <vector> using namespace std; struct Node; vector<Node> nodes; struct Node{ int X; void set(){ X = 3; cout << "Before, X = " << X << endl; nodes.push_back(Node()); cout << "After, X = " << X << endl; } }; int main() { nodes = …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.