คำถามติดแท็ก push-back

9
การ push_back องค์ประกอบจากเวกเตอร์เดียวกันปลอดภัยหรือไม่
vector<int> v; v.push_back(1); v.push_back(v[0]); หาก push_back ครั้งที่สองทำให้เกิดการจัดสรรใหม่การอ้างอิงถึงจำนวนเต็มแรกในเวกเตอร์จะใช้ไม่ได้อีกต่อไป อย่างนี้ไม่ปลอดภัยเหรอ? vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]); สิ่งนี้ทำให้ปลอดภัย?

2
ประสิทธิภาพของ C ++ 11 push_back () พร้อม std :: move เทียบกับ emplace_back () สำหรับอ็อบเจ็กต์ที่สร้างไว้แล้ว
emplace_back()โดยทั่วไปแล้วใน C ++ 11 เป็นที่ต้องการ (ในแง่ของประสิทธิภาพ) 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
ฉันได้พบพฤติกรรมแปลก ๆ บางอย่าง (บนเสียงดังกราวและ GCC) ในสถานการณ์ต่อไปนี้ ฉันมีเวกเตอร์ที่มีองค์ประกอบหนึ่งซึ่งเป็นตัวอย่างของการเรียนnodes 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 …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.