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

ไลบรารีเทมเพลตมาตรฐานหรือ STL เป็นไลบรารี C ++ ของคอนเทนเนอร์ทั่วไปตัววนซ้ำอัลกอริทึมและวัตถุฟังก์ชัน เมื่อ C ++ ได้มาตรฐานส่วนใหญ่ของ STL ถูกนำไปใช้ใน Standard Library และบางส่วนใน Standard Library ก็บางครั้งก็เรียกกันอย่างผิด ๆ ว่า "STL"

10
ตรวจสอบว่าแผนที่มีค่าสำหรับคีย์หรือไม่?
วิธีที่ดีที่สุดในการตรวจสอบว่าแผนที่ STL มีค่าสำหรับคีย์ที่กำหนดคืออะไร? #include <map> using namespace std; struct Bar { int i; }; int main() { map<int, Bar> m; Bar b = {0}; Bar b1 = {1}; m[0] = b; m[1] = b1; //Bar b2 = m[2]; map<int, Bar>::iterator iter = m.find(2); Bar b3 = iter->second; } ตรวจสอบสิ่งนี้ในตัวดีบักดูเหมือนว่าiterเป็นเพียงข้อมูลขยะ หากฉันไม่แสดงข้อคิดเห็นในบรรทัดนี้: …
256 c++  stl  map 

13
การเรียงลำดับเวกเตอร์ของวัตถุที่กำหนดเอง
จะมีวิธีการเกี่ยวกับการเรียงลำดับเวกเตอร์ที่มีวัตถุที่กำหนดเอง (เช่นผู้ใช้กำหนด) อาจจัดเรียงอัลกอริทึม STL มาตรฐานพร้อมกับเพรดิเคต (ฟังก์ชันหรือวัตถุฟังก์ชัน) ซึ่งจะทำงานบนหนึ่งในฟิลด์ (เป็นคีย์สำหรับการเรียงลำดับ) ในวัตถุที่กำหนดเองควรใช้ ฉันกำลังติดตามใช่ไหม?
249 c++  stl  sorting 

8
จำเป็นต้องใช้ std :: unique_ptr <T> เพื่อทราบความหมายแบบเต็มของ T หรือไม่?
ฉันมีรหัสในส่วนหัวที่มีลักษณะเช่นนี้: #include &lt;memory&gt; class Thing; class MyClass { std::unique_ptr&lt; Thing &gt; my_thing; }; ถ้าฉันรวมส่วนหัวนี้ใน cpp ที่ไม่ได้มีการThingกำหนดประเภทแล้วนี่ไม่ได้รวบรวมภายใต้ VS2010-SP1: 1&gt; ไฟล์ C: \ Program (x86) \ Microsoft Visual Studio 10.0 \ VC \ include \ memory (2067): ข้อผิดพลาด C2027: การใช้ประเภท 'สิ่งที่ไม่ได้กำหนด' แทนที่std::unique_ptrด้วยstd::shared_ptrและมันจะรวบรวม ดังนั้นฉันเดาว่านี่เป็นการนำไปใช้ของ VS2010 ในปัจจุบันstd::unique_ptrซึ่งต้องการคำจำกัดความเต็มรูปแบบและขึ้นอยู่กับการนำไปใช้โดยสิ้นเชิง หรือมันคืออะไร? มีบางสิ่งในข้อกำหนดมาตรฐานที่ทำให้เป็นไปไม่ได้std::unique_ptrที่การนำไปใช้เพื่อทำงานกับการประกาศล่วงหน้าเท่านั้น มันรู้สึกแปลกที่ควรถือพอยน์เตอร์ไว้เท่านั้นThingไม่ใช่เหรอ?

17
วิธีการดึงกุญแจทั้งหมด (หรือค่า) จาก std :: map และวางลงในเวคเตอร์?
นี่เป็นวิธีหนึ่งที่ฉันสามารถทำได้: struct RetrieveKey { template &lt;typename T&gt; typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map&lt;int, int&gt; m; vector&lt;int&gt; keys; // Retrieve all keys transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey()); // Dump all keys copy(keys.begin(), keys.end(), ostream_iterator&lt;int&gt;(cout, "\n")); แน่นอนว่าเราสามารถดึงค่าทั้งหมดออกจากแผนที่ได้ด้วยการกำหนด functor RetrieveValuesอีกค่า มีวิธีอื่นในการบรรลุเป้าหมายนี้อย่างง่ายดายหรือไม่? (ฉันสงสัยอยู่เสมอว่าทำไม std :: map ไม่รวมฟังก์ชั่นสมาชิกเพื่อให้เราทำเช่นนั้น)
246 c++  dictionary  stl  stdmap 

10
จะสรุปองค์ประกอบของเวกเตอร์ C ++ ได้อย่างไร
อะไรคือวิธีที่ดีในการหาผลรวมขององค์ประกอบทั้งหมดในstd::vector? สมมติว่าฉันมีเวกเตอร์ที่std::vector&lt;int&gt; vectorมีองค์ประกอบบางอย่างอยู่ในนั้น ตอนนี้ฉันต้องการหาผลรวมขององค์ประกอบทั้งหมด อะไรกันในวิธีเดียวกัน
240 c++  stl  vector 

27
ทำไมต้องใช้ตัววนซ้ำแทนดัชนีอาร์เรย์
รับโค้ดสองบรรทัดต่อไปนี้: for (int i = 0; i &lt; some_vector.size(); i++) { //do stuff } และนี่: for (some_iterator = some_vector.begin(); some_iterator != some_vector.end(); some_iterator++) { //do stuff } ฉันบอกว่าวิธีที่สองเป็นที่ต้องการ ทำไมถึงเป็นอย่างนี้

16
เวกเตอร์กับรายการใน STL
ฉันสังเกตเห็นใน Effective STL vector เป็นชนิดของลำดับที่ควรใช้เป็นค่าเริ่มต้น มันหมายความว่าอะไร? ดูเหมือนว่าการเพิกเฉยต่อประสิทธิภาพvectorสามารถทำอะไรก็ได้ ใครช่วยเสนอสถานการณ์ที่vectorไม่มีตัวเลือกที่เป็นไปได้ แต่listต้องใช้?
238 c++  list  vector  stl 

17
ลบช่องว่างออกจาก std :: string ใน C ++
วิธีที่แนะนำในการลบช่องว่างออกจากสตริงใน C ++ คืออะไร ฉันสามารถวนรอบตัวละครทั้งหมดและสร้างสายอักขระใหม่ แต่มีวิธีที่ดีกว่า
222 c++  stl 

2
ทำไมฉันไม่สามารถผลักดัน unique_ptr ไปยังเวกเตอร์ได้
เกิดอะไรขึ้นกับโปรแกรมนี้ #include &lt;memory&gt; #include &lt;vector&gt; int main() { std::vector&lt;std::unique_ptr&lt;int&gt;&gt; vec; int x(1); std::unique_ptr&lt;int&gt; ptr2x(&amp;x); vec.push_back(ptr2x); //This tiny command has a vicious error. return 0; } ข้อผิดพลาด: In file included from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/mingw32/bits/c++allocator.h:34:0, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/allocator.h:48, from c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/memory:64, from main.cpp:6: c:\mingw\bin\../lib/gcc/mingw32/4.5.0/include/c++/bits/unique_ptr.h: In member function 'void __gnu_cxx::new_allocator&lt;_Tp&gt;::construct(_Tp*, const _Tp&amp;) [with _Tp = std::unique_ptr&lt;int&gt;, _Tp* …


15
การเรียงลำดับ C ++ และการติดตามดัชนี
ใช้ C ++ และหวังว่าไลบรารี่มาตรฐานฉันต้องการเรียงลำดับของตัวอย่างตามลำดับจากน้อยไปหามาก แต่ฉันยังต้องการจดจำดัชนีดั้งเดิมของตัวอย่างใหม่ A : [5, 2, 1, 4, 3]ตัวอย่างเช่นผมมีชุดหรือเวกเตอร์หรือเมทริกซ์ของกลุ่มตัวอย่าง ฉันต้องการเรียงลำดับสิ่งเหล่านี้ B : [1,2,3,4,5]แต่ฉันต้องการจดจำดัชนีดั้งเดิมของค่าเพื่อให้ฉันสามารถรับชุดอื่นซึ่งจะเป็น: C : [2, 1, 4, 3, 0 ]- ซึ่งสอดคล้องกับดัชนีของแต่ละองค์ประกอบใน 'B' ในต้นฉบับ ' A' ตัวอย่างเช่นใน Matlab คุณสามารถทำได้: [a,b]=sort([5, 8, 7]) a = 5 7 8 b = 1 3 2 ทุกคนสามารถเห็นวิธีที่ดีในการทำเช่นนี้?
216 c++  sorting  stl  indexing 

22
std :: vector ช้ากว่าอาเรย์ธรรมดามากหรือไม่?
ฉันมักจะคิดว่ามันเป็นภูมิปัญญาทั่วไปที่std::vector"นำไปใช้เป็นอาร์เรย์" blah blah blah วันนี้ฉันลงไปทดสอบและดูเหมือนว่าจะไม่เป็นเช่นนั้น: นี่คือผลการทดสอบบางส่วน: UseArray completed in 2.619 seconds UseVector completed in 9.284 seconds UseVectorPushBack completed in 14.669 seconds The whole thing completed in 26.591 seconds นั่นคือช้าลงประมาณ 3 - 4 เท่า! ไม่ปรับให้เหมาะสมกับความคิดเห็นที่ " vectorอาจช้ากว่าสำหรับ nanosecs สักสองสาม" และรหัสที่ฉันใช้: #include &lt;cstdlib&gt; #include &lt;vector&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;boost/date_time/posix_time/ptime.hpp&gt; #include …
212 c++  arrays  performance  stl  vector 

13
เหตุใด C ++ STL จึงขึ้นอยู่กับเทมเพลตเป็นอย่างมาก (และไม่ได้อยู่ใน * อินเตอร์เฟส *)
ฉันหมายถึงนอกเหนือจากชื่อหน้าที่ (ไลบรารีเทมเพลตมาตรฐาน) ... C ++ เริ่มแรกมีจุดประสงค์เพื่อนำเสนอแนวคิดของ OOP ใน C นั่นคือ: คุณสามารถบอกได้ว่าเอนทิตีที่เฉพาะเจาะจงสามารถทำได้และไม่สามารถทำได้ องค์ประกอบของความสามารถบางอย่างยากที่จะอธิบายในลักษณะนี้เนื่องจากปัญหาของการถ่ายทอดทางพันธุกรรมที่หลากหลายและความจริงที่ว่า C ++ รองรับแนวคิดของอินเตอร์เฟสในทางที่ค่อนข้างงุ่มง่าม (เทียบกับ java และอื่น ๆ ) แต่มันมี (และอาจเป็น การปรับปรุง) จากนั้นเทมเพลตก็เข้ามาเล่นพร้อมกับ STL STL ดูเหมือนจะใช้แนวคิด OOP แบบดั้งเดิมและล้างลงในท่อระบายน้ำโดยใช้แม่แบบแทน ควรมีความแตกต่างระหว่างกรณีเมื่อแม่แบบที่ใช้ในการพูดคุยประเภทที่ชุดรูปแบบประเภทที่ไม่เกี่ยวข้องสำหรับการดำเนินงานของแม่แบบ (ภาชนะบรรจุตัวอย่างเช่น) มีvector&lt;int&gt;ความรู้สึกที่สมบูรณ์แบบ อย่างไรก็ตามในกรณีอื่น ๆ (ตัววนซ้ำและอัลกอริทึม) ประเภทของเทมเพลตควรเป็นไปตาม "แนวคิด" (อินพุต Iterator, Forward Iterator เป็นต้น ... ) ซึ่งรายละเอียดที่แท้จริงของแนวคิดถูกกำหนดโดยการนำเทมเพลตมาใช้ทั้งหมด ฟังก์ชั่น / ชั้นเรียนและไม่ตามระดับของประเภทที่ใช้กับแม่แบบซึ่งค่อนข้างต่อต้านการใช้งานของ OOP ตัวอย่างเช่นคุณสามารถบอกฟังก์ชั่น: …
211 c++  oop  templates  stl 



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