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

std :: vector เป็นคอนเทนเนอร์ลำดับต่อเนื่องในไลบรารีมาตรฐาน C ++ ที่เก็บข้อมูลจะได้รับการจัดการโดยอัตโนมัติดังนั้นการต่อท้ายองค์ประกอบหรือการปรับขนาดอาจทำให้เวกเตอร์จัดสรรหน่วยความจำได้มากขึ้น ใช้แท็กนี้สำหรับคำถามเกี่ยวกับ std :: vector หรือเกี่ยวกับ std :: vector


18
จะพิมพ์เนื้อหาของเวกเตอร์ได้อย่างไร?
ฉันต้องการพิมพ์เนื้อหาของเวกเตอร์ใน C ++ นี่คือสิ่งที่ฉันมี: #include <iostream> #include <fstream> #include <string> #include <cmath> #include <vector> #include <sstream> #include <cstdio> using namespace std; int main() { ifstream file("maze.txt"); if (file) { vector<char> vec(istreambuf_iterator<char>(file), (istreambuf_iterator<char>())); vector<char> path; int x = 17; char entrance = vec.at(16); char firstsquare = vec.at(x); if (entrance == 'S') …
282 c++  vector  output  stdvector  cout 

6
วิธีที่เร็วที่สุดในการรีเซ็ตค่าทุกค่าของ std :: vector <int> เป็น 0
วิธีที่เร็วที่สุดในการรีเซ็ตค่าทุกค่าเป็นstd::vector&lt;int&gt;0 และรักษาขนาดเริ่มต้นของเวกเตอร์คืออะไร สำหรับลูปที่มีโอเปอเรเตอร์ [] หรือไม่
199 c++  reset  stdvector 

8
std :: vector คัดลอกวัตถุด้วย push_back หรือไม่?
หลังจากการสืบสวนกับ valgrind ฉันได้สรุปว่า std :: vector สร้างสำเนาของวัตถุที่คุณต้องการ push_back เป็นเรื่องจริงเหรอ? เวกเตอร์ไม่สามารถเก็บการอ้างอิงหรือตัวชี้ของวัตถุโดยไม่มีการคัดลอก! ขอบคุณ
169 c++  stl  stdvector 

9
C ++ valarray กับเวกเตอร์
ฉันชอบเวกเตอร์มาก พวกเขาดีและรวดเร็ว แต่ฉันรู้ว่าสิ่งนี้เรียกว่าวาลเลย์ ทำไมฉันถึงต้องใช้วาลเลย์แทนเวกเตอร์ ฉันรู้ว่า valarrays มีน้ำตาลประโยค แต่นอกเหนือจากนั้นเมื่อมีประโยชน์


7
ฉันจะเรียงเวกเตอร์ของคู่ตามองค์ประกอบที่สองของคู่ได้อย่างไร
ถ้าฉันมีเวกเตอร์คู่: std::vector&lt;std::pair&lt;int, int&gt; &gt; vec; มีวิธีง่ายๆในการจัดเรียงรายการตามลำดับที่เพิ่มขึ้นตามองค์ประกอบที่สองของคู่หรือไม่? ฉันรู้ว่าฉันสามารถเขียนอ็อบเจกต์ฟังก์ชั่นเล็ก ๆ น้อย ๆ ที่จะทำงานได้ แต่มีวิธีใช้ชิ้นส่วนที่มีอยู่ของSTLและstd::lessทำงานโดยตรงหรือไม่ แก้ไข: ฉันเข้าใจว่าฉันสามารถเขียนฟังก์ชันหรือคลาสแยกกันเพื่อส่งต่อไปยังอาร์กิวเมนต์ที่สามเพื่อจัดเรียง คำถามคือฉันสามารถสร้างมันขึ้นมาจากสิ่งของมาตรฐานได้หรือไม่ ฉันมีบางอย่างที่ดูเหมือน: std::sort(vec.begin(), vec.end(), std::something_magic&lt;int, int, std::less&gt;());
133 c++  stl  stdvector 

8
วิธีที่มีประสิทธิภาพในการคืนค่า std :: vector ใน c ++
จำนวนข้อมูลที่ถูกคัดลอกเมื่อส่งคืน std :: vector ในฟังก์ชันและการเพิ่มประสิทธิภาพนั้นจะใหญ่เพียงใดในการวาง std :: vector ใน free-store (บน heap) และส่งกลับตัวชี้แทนนั่นคือ: std::vector *f() { std::vector *result = new std::vector(); /* Insert elements into result */ return result; } มีประสิทธิภาพมากกว่า: std::vector f() { std::vector result; /* Insert elements into result */ return result; } เหรอ?

6
วิธีการสุ่ม std :: vector?
ฉันกำลังมองหาวิธีทั่วไปที่ใช้ซ้ำได้ในการสลับไฟล์std::vectorใน C ++ นี่เป็นวิธีที่ฉันทำในปัจจุบัน แต่ฉันคิดว่ามันไม่ค่อยมีประสิทธิภาพเพราะมันต้องการอาร์เรย์กลางและจำเป็นต้องรู้ประเภทรายการ (DeckCard ในตัวอย่างนี้): srand(time(NULL)); cards_.clear(); while (temp.size() &gt; 0) { int idx = rand() % temp.size(); DeckCard* card = temp[idx]; cards_.push_back(card); temp.erase(temp.begin() + idx); }
99 c++  shuffle  stdvector 

8
vector :: at กับ vector :: operator []
ฉันรู้ว่าat()มันช้ากว่า[]เนื่องจากการตรวจสอบขอบเขตซึ่งจะกล่าวถึงในคำถามที่คล้ายกันเช่นC ++ Vector ที่ / [] ความเร็วของตัวดำเนินการ หรือ:: std :: vector :: at () vs operator [] &lt;&lt; ผลลัพธ์ที่น่าประหลาดใจ !! ช้าลง 5 ถึง 10 เท่า / เร็วขึ้น! . ฉันไม่เข้าใจว่าat()วิธีนี้ดีสำหรับอะไร ถ้าฉันมีเวกเตอร์ธรรมดา ๆ แบบนี้: std::vector&lt;int&gt; v(10);และฉันตัดสินใจที่จะเข้าถึงองค์ประกอบของมันโดยใช้at()แทน[]ในสถานการณ์เมื่อฉันมีดัชนีiและฉันไม่แน่ใจว่ามันอยู่ในขอบเขตเวกเตอร์หรือไม่มันบังคับให้ฉันรวมมันด้วยการลองจับ บล็อก : try { v.at(i) = 2; } catch (std::out_of_range&amp; oor) { ... } แม้ว่าฉันจะสามารถรับพฤติกรรมเดียวกันได้โดยใช้size()และตรวจสอบดัชนีด้วยตัวเองซึ่งดูเหมือนง่ายและสะดวกมากสำหรับฉัน: if …
95 c++  stl  stdvector 

4
Java เร็วกว่า 8 เท่าด้วยอาร์เรย์มากกว่า std :: vector ใน C ++ ผมทำอะไรผิด?
ฉันมีโค้ด Java ต่อไปนี้พร้อมอาร์เรย์ขนาดใหญ่หลายอันซึ่งไม่เคยเปลี่ยนขนาด มันทำงานใน 1100 ms บนคอมพิวเตอร์ของฉัน ผมนำมาใช้รหัสเดียวกันใน C ++ std::vectorและใช้ เวลาของการใช้งาน C ++ ซึ่งรันโค้ดเดียวกันคือ 8800 ms บนคอมพิวเตอร์ของฉัน ฉันทำอะไรผิดถึงได้ทำงานช้าขนาดนี้ โดยทั่วไปโค้ดจะทำสิ่งต่อไปนี้: for (int i = 0; i &lt; numberOfCells; ++i) { h[i] = h[i] + 1; floodedCells[i] = !floodedCells[i]; floodedCellsTimeInterval[i] = !floodedCellsTimeInterval[i]; qInflow[i] = qInflow[i] + 1; } มันวนซ้ำผ่านอาร์เรย์ต่างๆที่มีขนาดประมาณ 20,000 คุณสามารถค้นหาการใช้งานทั้งสองได้ภายใต้ลิงก์ต่อไปนี้: …

2
std :: dynarray vs std :: vector
C ++ 14 นำเสนอstd::dynarray: std :: dynarray เป็นคอนเทนเนอร์ลำดับที่ห่อหุ้มอาร์เรย์ที่มีขนาดคงที่ที่โครงสร้างและไม่เปลี่ยนแปลงตลอดอายุการใช้งานของวัตถุ std::dynarraystd::vectorจะต้องได้รับการจัดสรรในเวลาทำงานเหมือน ดังนั้นประโยชน์และการใช้งานstd::dynarrayในขณะที่เราสามารถใช้แบบstd::vectorไหนที่มีไดนามิกมากกว่า (และปรับขนาดได้อีกด้วย)?
84 c++  stdvector 

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&lt;int&gt; 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 

3
std :: vector (ab) ใช้ที่เก็บข้อมูลอัตโนมัติ
พิจารณาตัวอย่างต่อไปนี้: #include &lt;array&gt; int main() { using huge_type = std::array&lt;char, 20*1024*1024&gt;; huge_type t; } เห็นได้ชัดว่ามันจะผิดพลาดในแพลตฟอร์มส่วนใหญ่เนื่องจากขนาดสแต็คเริ่มต้นมักจะน้อยกว่า 20MB พิจารณารหัสต่อไปนี้: #include &lt;array&gt; #include &lt;vector&gt; int main() { using huge_type = std::array&lt;char, 20*1024*1024&gt;; std::vector&lt;huge_type&gt; v(1); } น่าแปลกที่มันเกิดปัญหาเช่นกัน! การย้อนกลับ (ด้วยหนึ่งในเวอร์ชันล่าสุดของ libstdc ++) นำไปสู่include/bits/stl_uninitialized.hไฟล์ซึ่งเราสามารถเห็นบรรทัดต่อไปนี้: typedef typename iterator_traits&lt;_ForwardIterator&gt;::value_type _ValueType; std::fill(__first, __last, _ValueType()); ตัวvectorสร้างปรับขนาดต้องเริ่มต้นองค์ประกอบและนี่คือวิธีการใช้งาน เห็นได้ชัดว่า_ValueType()ชั่วคราวเกิดปัญหาสแต็ก คำถามคือการใช้งานที่สอดคล้องหรือไม่ ถ้าใช่จริง ๆ …

3
ฉันจะรับความลึกของ std หลายมิติ :: เวกเตอร์ในเวลารวบรวมได้อย่างไร
ฉันมีฟังก์ชั่นที่ใช้หลายมิติstd::vectorและต้องการความลึก (หรือจำนวนมิติ) ที่จะส่งผ่านเป็นพารามิเตอร์เทมเพลต แทนที่จะเขียนโค้ดนี้ฉันอยากจะเขียนconstexprฟังก์ชั่นที่จะรับstd::vectorและคืนความลึกเป็นunsigned integerค่า ตัวอย่างเช่น: std::vector&lt;std::vector&lt;std::vector&lt;int&gt;&gt;&gt; v = { { { 0, 1}, { 2, 3 } }, { { 4, 5}, { 6, 7 } }, }; // Returns 3 size_t depth = GetDepth(v); สิ่งนี้จะต้องทำในเวลารวบรวมแต่เนื่องจากความลึกนี้จะถูกส่งผ่านไปยังฟังก์ชันเทมเพลตเป็นพารามิเตอร์เทมเพลต: // Same as calling foo&lt;3&gt;(v); foo&lt;GetDepth(v)&gt;(v); มีวิธีการทำเช่นนี้?

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