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

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

7
push_back กับ emplace_back
ฉันบิตสับสนเกี่ยวกับความแตกต่างระหว่างและpush_backemplace_back void emplace_back(Type&& _Val); void push_back(const Type& _Val); void push_back(Type&& _Val); เนื่องจากมีการใช้งานpush_backมากเกินไปในการอ้างอิงค่า rvalue ฉันไม่เห็นเลยว่าจุดประสงค์ของการemplace_backเป็นอย่างไร


29
วิธีที่ง่ายที่สุดในการเริ่มต้น std :: vector ด้วยองค์ประกอบ hardcoded คืออะไร?
ฉันสามารถสร้างอาร์เรย์และเริ่มต้นได้เช่นนี้ int a[] = {10, 20, 30}; ฉันจะสร้างstd::vectorและเริ่มต้นมันอย่างสง่างามในทำนองเดียวกันได้อย่างไร วิธีที่ดีที่สุดที่ฉันรู้คือ: std::vector<int> ints; ints.push_back(10); ints.push_back(20); ints.push_back(30); มีวิธีที่ดีกว่า?


17
วนซ้ำกว่า std :: vector: ตัวแปรดัชนีที่ไม่ได้ลงชื่อ vs
วิธีที่ถูกต้องในการวนซ้ำเวกเตอร์ใน C ++ คืออะไร? ลองพิจารณาชิ้นส่วนรหัสสองอันนี้อันนี้ใช้ได้ดี: for (unsigned i=0; i < polygon.size(); i++) { sum += polygon[i]; } และอันนี้: for (int i=0; i < polygon.size(); i++) { sum += polygon[i]; } warning: comparison between signed and unsigned integer expressionsซึ่งจะสร้าง ฉันใหม่ในโลกของ C ++ ดังนั้นunsignedตัวแปรที่ดูน่ากลัวสำหรับฉันและฉันรู้ว่าunsignedตัวแปรอาจเป็นอันตรายหากไม่ได้ใช้อย่างถูกต้องดังนั้น - ถูกต้องหรือไม่
470 c++  stl  unsigned  signed 

14
จะค้นหาได้อย่างไรว่าคีย์ที่ระบุนั้นมีอยู่ใน C ++ std :: map
ฉันพยายามตรวจสอบว่ามีรหัสที่ระบุอยู่ในแผนที่หรือไม่และทำไม่ได้: typedef map<string,string>::iterator mi; map<string, string> m; m.insert(make_pair("f","++--")); pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want cout << p.first;//I'm getting error here ดังนั้นฉันจะพิมพ์สิ่งที่อยู่ใน p ได้อย่างไร
451 c++  dictionary  stl 


5
อะไรคือความแตกต่างระหว่าง“ STL” และ“ ไลบรารีมาตรฐาน C ++”?
มีคนนำบทความนี้ไปสู่ความสนใจของฉันที่อ้างว่า(ฉันถอดความ)คำ STL ถูกนำไปใช้ในทางที่ผิดเพื่ออ้างถึงทั้งห้องสมุดมาตรฐาน C ++ แทนส่วนที่นำมาจาก SGI STL (... ) มันหมายถึง "STL" แม้จะมีคนเพียงไม่กี่คนที่ยังใช้ STL (ซึ่งได้รับการออกแบบที่ SGI) บางส่วนของ C ++ Standard Library นั้นขึ้นอยู่กับส่วนของ STL และเป็นส่วนเหล่านี้ที่หลายคน (รวมถึงผู้แต่งหลายคนและ cplusplus.com ซึ่งมีข้อผิดพลาดอย่างฉาวโฉ่ยังคงเรียกว่า "the STL" อย่างไรก็ตามนี่ไม่ถูกต้อง จริง ๆ แล้วมาตรฐาน C ++ ไม่เคยกล่าวถึง "STL" และมีความแตกต่างของเนื้อหาระหว่างทั้งสอง (... ) "STL" ไม่ค่อยถูกใช้เพื่ออ้างถึงบิตของ stdlib ที่เกิดขึ้นกับ SGI STL ผู้คนคิดว่ามันเป็นห้องสมุดมาตรฐานทั้งหมด มันได้รับการใส่ CV และมันก็ทำให้เข้าใจผิด …

14
เหตุใด C ++ STL จึงไม่ให้บริการคอนเทนเนอร์ "ต้นไม้"
เหตุใด C ++ STL จึงไม่ให้บริการคอนเทนเนอร์ "ต้นไม้" และสิ่งที่ดีที่สุดที่จะใช้แทนคืออะไร ฉันต้องการจัดเก็บลำดับชั้นของวัตถุเป็นต้นไม้แทนที่จะใช้ต้นไม้เป็นการปรับปรุงประสิทธิภาพ ...
373 c++  stl  tree 

9
เหตุใดฉันจึงไม่สามารถสร้างเวกเตอร์ของการอ้างอิงได้
เมื่อฉันทำสิ่งนี้: std::vector<int> hello; ทุกอย่างใช้งานได้ดี อย่างไรก็ตามเมื่อฉันทำให้เป็นเวกเตอร์ของการอ้างอิงแทน: std::vector<int &> hello; ฉันได้รับข้อผิดพลาดที่น่ากลัวเช่น ข้อผิดพลาด C2528: 'ตัวชี้': ตัวชี้ไปยังการอ้างอิงนั้นผิดกฎหมาย ฉันต้องการใส่การอ้างอิงจำนวนมากเพื่อวางโครงสร้างในเวกเตอร์เพื่อที่ฉันจะได้ไม่ต้องยุ่งกับพอยน์เตอร์ ทำไมเวกเตอร์ถึงโกรธเคืองเรื่องนี้? ตัวเลือกเดียวของฉันคือใช้เวกเตอร์พอยน์เตอร์แทนหรือไม่


11
การเรียงลำดับเวกเตอร์ตามลำดับจากมากไปน้อย
ฉันควรใช้ std::sort(numbers.begin(), numbers.end(), std::greater<int>()); หรือ std::sort(numbers.rbegin(), numbers.rend()); // note: reverse iterators จะจัดเรียงเวกเตอร์ตามลำดับจากมากไปน้อยเป็นอย่างไร มีประโยชน์หรือข้อเสียเปรียบกับวิธีใดวิธีหนึ่งหรือไม่?
310 c++  sorting  stl  vector  iterator 

14
วิธีที่ดีที่สุดในการแยก subvector จากเวกเตอร์
สมมติว่าผมมีstd::vector(โทรให้ของมันmyVec) Nขนาด อะไรคือวิธีที่ง่ายที่สุดในการสร้างเวกเตอร์ใหม่ซึ่งประกอบด้วยสำเนาขององค์ประกอบ X ถึง Y โดยที่ 0 <= X <= Y <= N-1 ยกตัวอย่างเช่นmyVec [100000]ผ่านในเวกเตอร์ของขนาดmyVec [100999]150000 หากไม่สามารถทำได้อย่างมีประสิทธิภาพด้วยเวกเตอร์มีประเภทข้อมูล STL อื่นที่ฉันควรใช้แทนหรือไม่
295 c++  stl  vector  range 

23
วิธีที่มีประสิทธิภาพมากที่สุดในการลบข้อมูลที่ซ้ำกันและเรียงลำดับเวกเตอร์คืออะไร
ฉันต้องใช้เวกเตอร์ C ++ ที่อาจมีองค์ประกอบจำนวนมากลบรายการที่ซ้ำกันและเรียงลำดับ ขณะนี้ฉันมีรหัสด้านล่าง แต่มันใช้งานไม่ได้ vec.erase( std::unique(vec.begin(), vec.end()), vec.end()); std::sort(vec.begin(), vec.end()); ฉันจะทำอย่างถูกต้องได้อย่างไร นอกจากนี้มันจะเร็วกว่าที่จะลบรายการที่ซ้ำก่อน (คล้ายกับรหัสด้านบน) หรือดำเนินการเรียงลำดับก่อนหรือไม่ หากฉันทำการเรียงลำดับก่อนจะรับประกันว่าจะยังคงเรียงลำดับหลังจากstd::uniqueถูกเรียกใช้งานหรือไม่? หรือมีวิธีอื่น (อาจมีประสิทธิภาพมากกว่า) ในการทำสิ่งนี้ทั้งหมดหรือไม่
274 c++  sorting  vector  stl  duplicates 

4
std :: ความยาวของสตริง () และขนาด () ฟังก์ชั่นสมาชิก
ผมอ่านคำตอบสำหรับเรื่องนี้คำถามและพบว่ามีจริงวิธีการที่เรียกว่าlength()สำหรับstd::string(ฉันมักจะใช้size()) มีเหตุผลเฉพาะสำหรับการมีวิธีนี้ในstd::stringชั้นเรียนหรือไม่? ผมอ่านทั้ง MSDN และ CppRefernce และพวกเขาชี้ให้เห็นว่ามีความแตกต่างระหว่างไม่มีและsize() length()หากเป็นเช่นนั้นจะไม่สร้างความสับสนให้กับผู้ใช้ของชั้นเรียนหรือไม่
264 c++  string  stl  size 

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