คำถามติดแท็ก vector

เวกเตอร์เป็นอาร์เรย์แบบมิติเดียว: ประกอบด้วยส่วนประกอบที่สามารถเข้าถึงได้โดยใช้ดัชนีอินทิกรัล ในบางภาษาขนาดของเวกเตอร์สามารถขยายหรือย่อขนาดได้ตามต้องการเพื่อรองรับการเพิ่มและลบรายการหลังจากสร้างเวกเตอร์แล้ว ใช้ 'กราฟิกแบบเวกเตอร์' สำหรับการแสดงผลกราฟิก

10
ทำไมฉันถึงชอบใช้เวกเตอร์เพื่อ deque
ตั้งแต่ ทั้งคู่เป็นคอนเทนเนอร์หน่วยความจำที่ต่อเนื่องกัน คุณลักษณะที่ชาญฉลาด deque มีเวกเตอร์เกือบทุกอย่าง แต่มีมากกว่านั้นเนื่องจากการแทรกที่ด้านหน้ามีประสิทธิภาพ ทำไมทุกคน Whould ต้องการstd::vectorเพื่อstd::deque?
87 c++  stl  vector  deque 

5
แปลง Nameed Character Vector เป็น data.frame
ฉันมีเวกเตอร์อักขระที่มีชื่อที่ส่งคืนจาก xmlAttrs ดังนี้: testVect <- structure(c("11.2.0.3.0", "12.89", "12.71"), .Names = c("db_version", "elapsed_time", "cpu_time")) ฉันต้องการแปลงเป็น data frame ที่มีลักษณะดังนี้: testDF <- data.frame("db_version"="11.2.0.3.0","elapsed_time"=12.89,"cpu_time"=12.71) head(testDF) db_version elapsed_time cpu_time 1 11.2.0.3.0 12.89 12.71

5
C # เทียบเท่าเวกเตอร์ C ++ ที่มีหน่วยความจำติดกัน?
C # เทียบเท่าเวกเตอร์ C ++ คืออะไร ฉันกำลังค้นหาคุณสมบัตินี้: เพื่อให้มีอาร์เรย์แบบไดนามิกของหน่วยความจำที่จัดเก็บอย่างต่อเนื่องซึ่งไม่มีการลงโทษด้านประสิทธิภาพสำหรับการเข้าถึงกับอาร์เรย์มาตรฐาน ฉันกำลังค้นหาและพวกเขาก็พูดว่า.NET equivalent to the vector in C++ is the ArrayList: ArrayList มีคุณสมบัติหน่วยความจำที่ต่อเนื่องกันหรือไม่?
87 c#  c++  vector 

6
การคำนวณผลิตภัณฑ์ข้ามเวกเตอร์ 2 มิติ
จากวิกิพีเดีย: ผลคูณไขว้เป็นการดำเนินการไบนารีบนเวกเตอร์สองตัวในปริภูมิแบบยุคลิดสามมิติที่ส่งผลให้เวกเตอร์อื่นตั้งฉากกับระนาบที่มีเวกเตอร์อินพุตสองตัว เนื่องจากคำจำกัดความถูกกำหนดเฉพาะในมิติสาม ( หรือเจ็ดหนึ่งและศูนย์ ) หนึ่งจะคำนวณผลคูณไขว้ของเวกเตอร์ 2d สองตัวได้อย่างไร ฉันได้เห็นการใช้งานสองอย่าง หนึ่งส่งคืนเวกเตอร์ใหม่ (แต่ยอมรับเพียงเวกเตอร์เดียว) อีกตัวส่งคืนสเกลาร์ (แต่เป็นการคำนวณระหว่างเวกเตอร์สองตัว) การนำไปใช้ 1 (ส่งกลับสเกลาร์): float CrossProduct(const Vector2D & v1, const Vector2D & v2) const { return (v1.X*v2.Y) - (v1.Y*v2.X); } การนำไปใช้ 2 (ส่งคืนเวกเตอร์): Vector2D CrossProduct(const Vector2D & v) const { return Vector2D(v.Y, -v.X); } ทำไมการใช้งานที่แตกต่างกัน? ฉันจะใช้การปรับใช้สเกลาร์เพื่ออะไร ฉันจะใช้การใช้งานเวกเตอร์เพื่ออะไร …

7
จะส่งเวกเตอร์ไปยังฟังก์ชันได้อย่างไร?
ฉันกำลังพยายามส่งเวกเตอร์เป็นอาร์กิวเมนต์ให้กับฟังก์ชันและฉันคิดไม่ออกว่าจะทำให้มันทำงานอย่างไร พยายามหลายวิธี แต่ทั้งหมดให้ข้อความแสดงข้อผิดพลาดที่แตกต่างกัน ฉันใส่โค้ดเพียงบางส่วนเท่านั้นเนื่องจากเป็นเพียงส่วนนี้ที่ใช้ไม่ได้ (เวกเตอร์ "สุ่ม" เต็มไปด้วยการสุ่ม แต่เรียงลำดับค่าระหว่าง 0 ถึง 200) อัปเดตรหัส: #include <iostream> #include <ctime> #include <algorithm> #include <vector> using namespace std; int binarySearch(int first, int last, int search4, vector<int>& random); int main() { vector<int> random(100); int search4, found; int first = 0; int last = 99; found = …
86 c++  function  vector 

10
ใช้ std :: vector เป็นมุมมองในหน่วยความจำดิบ
ฉันใช้ไลบรารี่ภายนอกซึ่งในบางครั้งจะให้ตัวชี้แบบดิบแก่อาร์เรย์ของจำนวนเต็มและขนาด ตอนนี้ฉันต้องการที่จะใช้std::vectorในการเข้าถึงและแก้ไขค่าเหล่านี้ในสถานที่แทนที่จะเข้าถึงพวกเขาด้วยตัวชี้แบบดิบ นี่คือตัวอย่าง articifial ที่อธิบายถึงจุด: size_t size = 0; int * data = get_data_from_library(size); // raw data from library {5,3,2,1,4}, size gets filled in std::vector<int> v = ????; // pseudo vector to be used to access the raw data std::sort(v.begin(), v.end()); // sort raw data in place for (int i …
71 c++  c++11  vector  stdvector 

2
วิธีการเริ่มต้น C ++ 17 เวกเตอร์ของคู่ด้วยองค์ประกอบเสริม
ใน C ++ 17 คุณจะประกาศและกำหนดค่าเริ่มต้นเวกเตอร์ของคู่ (หรือ tuples) ด้วยองค์ประกอบเสริมได้อย่างไร std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true}, {2, false}, {3, nullptr}}; ฉันมีคู่ที่องค์ประกอบที่สองอาจเป็นโมฆะ / ไม่จำเป็น

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 …

6
การสลับเวกเตอร์สองตัวที่แตกต่างกันใน C ++ ใช้วิธี std :: vector :: swap ปลอดภัยหรือไม่?
สมมติว่าคุณมีรหัสต่อไปนี้: #include <iostream> #include <string> #include <vector> int main() { std::vector<std::string> First{"example", "second" , "C++" , "Hello world" }; std::vector<std::string> Second{"Hello"}; First.swap(Second); for(auto a : Second) std::cout << a << "\n"; return 0; } ลองนึกภาพเวกเตอร์ไม่ใช่std::stringยังคลาส: std::vector<Widget> WidgetVector; std::vector<Widget2> Widget2Vector; มันปลอดภัยไหมที่จะสลับสองเวกเตอร์ด้วยstd::vector::swapวิธีการ: WidgetVector.swap(Widget2Vector);หรือมันจะนำไปสู่ ​​UB?
30 c++  c++11  vector  stdvector  swap 

3
การเรียงลำดับเวกเตอร์ตามลำดับจากมากไปน้อยภายในสองช่วง
ว่าฉันมีเวกเตอร์จำนวนเต็ม: std::vector<int> indices; for (int i=0; i<15; i++) indices.push_back(i); จากนั้นฉันเรียงตามลำดับจากมากไปน้อย: sort(indices.begin(), indices.end(), [](int first, int second) -> bool{return indices[first] > indices[second];}) for (int i=0; i<15; i++) printf("%i\n", indices[i]); สิ่งนี้สร้างสิ่งต่อไปนี้: 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ตอนนี้ฉันต้องการให้หมายเลข 3, 4, 5 และ 6 …

2
เวกเตอร์เป็นคีย์ทำงานอย่างไรภายใน C ++
คำตอบ SO นี้บอกว่าแผนที่ STL พร้อม Vector สำหรับคีย์นั้นเวกเตอร์สามารถใช้เป็นคีย์ได้ ดังนั้นเมื่อเราใช้เวกเตอร์เป็นกุญแจ ใช้งานได้จริงอย่างไรเนื่องจากคีย์ต้องไม่ซ้ำกันดังนั้นเมื่อเราแทรกเวกเตอร์อื่นที่มีองค์ประกอบเดียวกันจะmapตรวจสอบองค์ประกอบที่ซ้ำกันตามองค์ประกอบหรือชื่อของเวกเตอร์ระบุบางอย่าง เช่นเดียวกับชื่อของอาร์เรย์หมายถึงที่อยู่ฐาน ดังนั้นอาเรย์สามารถใช้เป็นคีย์ได้เนื่องจากที่อยู่พื้นฐานสามารถใช้เป็นคีย์ในกรณีนี้ แต่คีย์ในกรณีของเวกเตอร์คืออะไร มันทำงานอย่างไรภายใน เพราะเมื่อฉันพิมพ์ชื่อของเวกเตอร์ฉันจะได้รับข้อผิดพลาด vector<int> v; cout<<v; //error
14 c++  arrays  dictionary  vector  stl 

1
ฉันสามารถ list-initialize std :: vector พร้อมการส่งต่อองค์ประกอบที่สมบูรณ์ได้หรือไม่?
ฉันสังเกตเห็นว่ารายการรวม initalization ของ std :: vector ดำเนินการเริ่มต้นการคัดลอกเมื่อย้ายจะใช้งานได้มากขึ้น ในเวลาเดียวกันหลาย emplace_backs ทำสิ่งที่ฉันต้องการ init_emplace_vectorฉันเท่านั้นที่สามารถเกิดขึ้นกับวิธีการแก้ปัญหาที่ไม่สมบูรณ์ของการเขียนฟังก์ชั่นแม่แบบ มันเป็นสิ่งที่ดีที่สุดสำหรับตัวสร้างค่าเดียวที่ไม่ชัดเจน template <typename T, typename... Args> std::vector<T> init_emplace_vector(Args&&... args) { std::vector<T> vec; vec.reserve(sizeof...(Args)); // by suggestion from user: eerorika (vec.emplace_back(std::forward<Args>(args)), ...); // C++17 return vec; } คำถาม ฉันจำเป็นต้องใช้ emplace_backเพื่อเริ่มต้น std :: vector ให้มีประสิทธิภาพมากที่สุดหรือไม่ // an integer passed to large …

6
จะทราบได้อย่างไรว่าเวกเตอร์ประกอบด้วยองค์ประกอบเดียวกัน?
ฉันจะตรวจสอบได้อย่างไรว่าเวกเตอร์มีองค์ประกอบเดียวกันทั้งหมดหรือไม่ เช่นสมมติว่าฉันมี: vec1 = rep(10,20) vec2 = seq(1:20) ฉันจะแสดงให้เห็นว่าvec1มีองค์ประกอบเดียวกันทั้งหมดได้อย่างไร
12 r  vector  unique 

2
การเริ่มต้นของเวกเตอร์อะตอมมิก
พิจารณา: void foo() { std::vector<std::atomic<int>> foo(10); ... } ตอนนี้เนื้อหาของ foo ใช้ได้หรือไม่ หรือฉันจำเป็นต้องวนซ้ำอย่างชัดเจนและเริ่มต้นได้อย่างไร ฉันได้ตรวจสอบ Godbolt แล้วและดูเหมือนดี แต่มาตรฐานดูเหมือนจะสับสนมากในจุดนี้ ตัวสร้าง:: เวกเตอร์ constructor บอกว่ามันแทรกอินสแตนซ์ที่แทรกค่าเริ่มต้นของstd::atomic<int>ซึ่งเป็นค่าเริ่มต้นผ่านตำแหน่งnewผ่านทางตำแหน่ง ฉันคิดว่าผลของการกำหนดค่าเริ่มต้นนี้ใช้: 2) ถ้า T เป็นประเภทคลาสที่มีคอนสตรัคเตอร์เริ่มต้นที่ไม่ได้จัดเตรียมโดยผู้ใช้หรือลบออก (นั่นคือมันอาจเป็นคลาสที่มีคอนสตรัคเตอร์ปริยายที่กำหนดหรือเป็นค่าปริยาย) วัตถุจะเป็นศูนย์เริ่มต้นแล้ว เริ่มต้นได้เริ่มต้นถ้ามันมีตัวสร้างเริ่มต้นที่ไม่สำคัญ; สำหรับฉันแล้วดูเหมือนว่าอะตอมมิกนั้นถูกกำหนดค่าเริ่มต้นเป็นศูนย์ ดังนั้นคำถามก็คือ a - initialisation ไม่เป็นศูนย์ของstd::atomic<int>ทำให้ผลลัพธ์เป็นวัตถุที่ถูกต้องเป็นศูนย์หรือไม่? ฉันจะเดาว่าคำตอบคือ "ใช่ในทางปฏิบัติ แต่ยังไม่ได้กำหนดจริงๆ"? หมายเหตุ: คำตอบนี้ยอมรับว่ามันเป็นค่าเริ่มต้นเป็นศูนย์ แต่ไม่ได้พูดจริง ๆ ถ้านั่นหมายความว่าวัตถุนั้นถูกต้อง
12 c++  vector  atomic 

3
ความแตกต่างระหว่าง std :: resize (n) และ std :: shrink_to_fit ใน C ++?
ฉันเจอข้อความเหล่านี้: resize(n)- ปรับขนาดภาชนะเพื่อให้มีองค์ประกอบ 'n' shrink_to_fit()- ลดความจุของภาชนะบรรจุให้พอดีกับขนาดและทำลายส่วนประกอบทั้งหมดเกินความจุ มีความแตกต่างที่สำคัญระหว่างฟังก์ชั่นเหล่านี้หรือไม่? พวกมันมาอยู่ใต้เวกเตอร์ใน c ++

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.