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

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

16
วิธีการแปลง wstring เป็นสตริง?
คำถามคือวิธีการแปลง wstring เป็นสตริง? ฉันมีตัวอย่างต่อไป: #include <string> #include <iostream> int main() { std::wstring ws = L"Hello"; std::string s( ws.begin(), ws.end() ); //std::cout <<"std::string = "<<s<<std::endl; std::wcout<<"std::wstring = "<<ws<<std::endl; std::cout <<"std::string = "<<s<<std::endl; } เอาต์พุตที่มีบรรทัดที่ใส่ความคิดเห็นคือ: std::string = Hello std::wstring = Hello std::string = Hello แต่ไม่มีเพียง: std::wstring = Hello มีอะไรผิดปกติในตัวอย่างหรือไม่ ฉันสามารถทำการแปลงแบบด้านบนได้ไหม? แก้ไข ตัวอย่างใหม่ …
204 c++  unicode  stl  wstring 

12
ในแผนที่ STL ควรใช้แผนที่ :: insert มากกว่า [] หรือไม่
ขณะที่ผ่านมาผมได้มีการพูดคุยกับเพื่อนร่วมงานเกี่ยวกับวิธีการใส่ค่าใน STL เป็นแผนที่ ฉันชอบ map[key] = value; เพราะรู้สึกเป็นธรรมชาติและอ่านง่ายในขณะที่เขาชอบ map.insert(std::make_pair(key, value)) ฉันแค่ถามเขาและพวกเราทั้งสองไม่สามารถจำเหตุผลที่แทรกได้ดีกว่า แต่ฉันแน่ใจว่ามันไม่ใช่แค่การตั้งค่ารูปแบบ แต่มีเหตุผลทางเทคนิคเช่นประสิทธิภาพ อ้างอิง SGI STLบอกว่า "พูดอย่างเคร่งครัดฟังก์ชั่นสมาชิกนี้ไม่จำเป็น: มันมีอยู่เพื่อความสะดวกเท่านั้น" ใครสามารถบอกเหตุผลนั้นกับฉันหรือฉันแค่ฝันว่ามี?
201 c++  stl  map  stdmap 

5
C ++ STL Vectors: รับตัววนซ้ำจากดัชนีหรือไม่
ดังนั้นฉันจึงเขียนโค้ดที่เข้าถึงองค์ประกอบใน stl เวกเตอร์โดย index [] แต่ตอนนี้ฉันต้องคัดลอกอันของเวกเตอร์ ดูเหมือนว่าvector.insert(pos, first, last)เป็นฟังก์ชั่นที่ฉันต้องการ ... ยกเว้นฉันจะมีครั้งแรกและครั้งสุดท้ายเป็น ints มีวิธีที่ดีที่ฉันสามารถใช้ตัววนซ้ำตามค่าเหล่านี้หรือไม่?
200 c++  stl  vector  iterator 

12
โยนคนที่อ้วนที่สุดออกจากเครื่องบินมากเกินไป
สมมติว่าคุณมีเครื่องบินและมีเชื้อเพลิงน้อย เว้นแต่ว่าเครื่องบินจะลดน้ำหนักผู้โดยสารลง 3,000 ปอนด์มันจะไม่สามารถไปถึงสนามบินถัดไปได้ เพื่อช่วยชีวิตคนจำนวนมากที่สุดเราอยากจะโยนคนที่หนักที่สุดออกจากเครื่องบินก่อน และใช่มีผู้คนนับล้านบนเครื่องบินและเราต้องการอัลกอริธึมที่เหมาะสมที่สุดในการค้นหาผู้โดยสารที่หนักที่สุดโดยไม่จำเป็นต้องเรียงลำดับรายการทั้งหมด นี่เป็นปัญหาพร็อกซีสำหรับสิ่งที่ฉันพยายามรหัสใน C ++ ฉันต้องการจะทำ "partial_sort" ในรายการผู้โดยสารโดยน้ำหนัก แต่ฉันไม่ทราบว่าฉันต้องการองค์ประกอบกี่ชิ้น ฉันสามารถใช้อัลกอริทึม "partial_sort" ของตัวเอง ("partial_sort_accumulate_until") ได้ แต่ฉันสงสัยว่ามีวิธีที่ง่ายกว่าในการทำสิ่งนี้โดยใช้ STL มาตรฐาน
200 c++  algorithm  sorting  stl 

7
เหตุใดจึงต้องใช้ฟังก์ชันเริ่มต้นและสิ้นสุดที่ไม่ใช่สมาชิกใน C ++ 11
คอนเทนเนอร์มาตรฐานทุกตัวมี a beginและendเมธอดสำหรับส่งคืนตัววนซ้ำสำหรับคอนเทนเนอร์นั้น อย่างไรก็ตาม C ++ 11 ได้เปิดตัวฟังก์ชั่นฟรีที่เรียกว่าstd::beginและฟังก์ชั่นการstd::endโทรbeginและendสมาชิก ดังนั้นแทนที่จะเขียน auto i = v.begin(); auto e = v.end(); คุณต้องการเขียน auto i = std::begin(v); auto e = std::end(v); ในคำพูดของเขาการเขียน Modern C ++ Herb Sutter บอกว่าคุณควรใช้ฟังก์ชั่นฟรีทันทีเมื่อคุณต้องการเริ่มต้นหรือสิ้นสุดตัววนซ้ำสำหรับคอนเทนเนอร์ อย่างไรก็ตามเขาไม่ได้ลงรายละเอียดว่าทำไมคุณถึงต้องการ การดูรหัสจะช่วยให้คุณประหยัดอักขระทั้งหมดหนึ่งตัว ดังนั้นเท่าที่ภาชนะมาตรฐานไปฟังก์ชั่นฟรีดูเหมือนจะไร้ประโยชน์อย่างสมบูรณ์ Herb Sutter ระบุว่ามีประโยชน์สำหรับภาชนะที่ไม่ได้มาตรฐาน แต่อีกครั้งเขาไม่ได้ลงรายละเอียด ดังนั้นคำถามคือสิ่งที่รุ่นฟังก์ชั่นอิสระของstd::beginและstd::endทำนอกเหนือจากการเรียกรุ่นฟังก์ชั่นสมาชิกที่สอดคล้องกันและทำไมคุณต้องการที่จะใช้พวกเขา?

6
เหตุใด std :: map ถูกนำไปใช้เป็นต้นไม้สีแดงดำ
ทำไมถูกstd::mapนำไปใช้เป็นต้นไม้สีแดงดำ ? มีโครงสร้างการค้นหาแบบทวิภาคที่สมดุลหลายต้น (BST) อะไรคือข้อดีของการออกแบบต้นไม้สีแดง - ดำ

7
Deque ใน STL คืออะไร
Наэтотвопросестьответына Stack Overflow нарусском : Особенностьразмещениеэлементов in std :: ฉันมองไปที่คอนเทนเนอร์ STL และพยายามคิดว่ามันคืออะไร (เช่นโครงสร้างข้อมูลที่ใช้) และdequeหยุดฉัน: ฉันคิดตอนแรกว่ามันเป็นรายการเชื่อมโยงสองชั้นซึ่งจะช่วยให้การแทรกและการลบจากปลายทั้งสองใน เวลาคงที่ แต่ฉันกังวลใจกับคำสัญญาที่ทำโดยผู้ดำเนินการ [] ที่ต้องทำในเวลาที่แน่นอน ในรายการที่เชื่อมโยงการเข้าถึงโดยพลการควรเป็น O (n) ใช่ไหม และถ้าเป็นอาร์เรย์แบบไดนามิกมันจะเพิ่มองค์ประกอบในเวลาคงที่ได้อย่างไร มันควรจะกล่าวว่าการจัดสรรอาจจะเกิดขึ้นและที่ O (1) เป็นค่าใช้จ่ายตัดจำหน่ายเหมือนเวกเตอร์ ดังนั้นฉันจึงสงสัยว่าโครงสร้างแบบนี้อนุญาตให้เข้าถึงโดยพลการในเวลาที่กำหนดได้อย่างไรและในเวลาเดียวกันก็ไม่จำเป็นต้องย้ายไปอยู่ที่ใหม่ที่ใหญ่กว่า
194 c++  stl  deque 

7
ทำไม std :: list :: reverse มีความซับซ้อน O (n)
เหตุใดฟังก์ชันย้อนกลับสำหรับstd::listคลาสในไลบรารีมาตรฐาน C ++ จึงมี Linear runtime ฉันคิดว่าสำหรับรายการที่ลิงก์สองเท่าฟังก์ชันย้อนกลับควรเป็น O (1) การย้อนกลับรายการที่เชื่อมโยงเป็นทวีคูณควรเกี่ยวข้องกับการสลับหัวและตัวชี้ท้าย
192 c++  c++11  stl  linked-list 

13
ท่านจะไม่ได้รับมรดกจาก std :: vector
ตกลงนี้มันยากที่จะสารภาพ std::vectorแต่ฉันจะมีสิ่งล่อใจที่แข็งแกร่งในขณะนี้จะได้รับมรดกจาก ฉันต้องการอัลกอริทึมแบบกำหนดเองประมาณ 10 แบบสำหรับเวกเตอร์และฉันต้องการให้พวกเขาเป็นสมาชิกของเวกเตอร์โดยตรง แต่โดยธรรมชาติฉันต้องการมีส่วนstd::vectorต่อประสานที่เหลือ ความคิดแรกของฉันในฐานะพลเมืองที่ปฏิบัติตามกฎหมายคือการมีstd::vectorสมาชิกในMyVectorชั้นเรียน แต่จากนั้นฉันจะต้องทบทวนส่วนติดต่อทั้งหมดของ std :: vector อีกครั้งด้วยตนเอง พิมพ์มากเกินไป ต่อไปฉันนึกถึงมรดกส่วนตัวดังนั้นแทนที่จะใช้วิธีประณามฉันจะเขียนบทความหลายusing std::vector::memberเรื่องในส่วนสาธารณะ อันนี้น่าเบื่อจริง ๆ แล้ว และฉันอยู่ที่นี่ฉันคิดว่าฉันสามารถสืบทอดต่อสาธารณชนได้ง่ายstd::vectorๆ แต่ให้คำเตือนในเอกสารที่ว่าคลาสนี้ไม่ควรใช้ polymorphically ฉันคิดว่านักพัฒนาส่วนใหญ่มีความสามารถพอที่จะเข้าใจได้ว่าสิ่งนี้ไม่ควรใช้ polymorphically อยู่ดี การตัดสินใจของฉันเป็นการไม่ยุติธรรมอย่างแน่นอนหรือไม่? ถ้าเป็นเช่นนั้นทำไม คุณสามารถให้ทางเลือกซึ่งจะมีสมาชิกเพิ่มเติมจริง ๆ แล้วสมาชิก แต่จะไม่เกี่ยวข้องกับการพิมพ์หน้าจอทั้งหมดของเวกเตอร์อีกครั้งหรือไม่ ฉันสงสัยมัน แต่ถ้าคุณทำได้ฉันก็จะมีความสุข นอกจากนี้นอกเหนือจากความจริงที่ว่าคนงี่เง่าบางคนสามารถเขียนสิ่งที่ชอบ std::vector<int>* p = new MyVector มีอันตรายอื่นที่เหมือนจริงในการใช้ MyVector หรือไม่? โดยบอกว่าสมจริงฉันจะละทิ้งสิ่งต่าง ๆ อย่างเช่นจินตนาการถึงฟังก์ชั่นที่ใช้ตัวชี้ไปยังเวกเตอร์ ... ฉันได้กล่าวถึงกรณีของฉัน ฉันได้กระทำบาป. ตอนนี้ก็ขึ้นอยู่กับคุณที่จะให้อภัยฉันหรือไม่ :)
189 c++  oop  inheritance  stl  vector 

14
คอนเทนเนอร์ STL หรือ Qt
ข้อดีและข้อเสียของการใช้ Qt container QMapคืออะไรQVectorฯลฯ ) มากกว่าเทียบเท่า STL ของพวกเขา? ฉันเห็นเหตุผลข้อหนึ่งที่ชอบ Qt: คอนเทนเนอร์ Qt สามารถส่งผ่านไปยังส่วนอื่น ๆ ของ Qt ตัวอย่างเช่นพวกเขาสามารถใช้ในการเติมQVariantและจากนั้นQSettings(มีข้อ จำกัด บางอย่างเท่านั้นQListและQMap/ QHashซึ่งมีกุญแจเป็นสายได้รับการยอมรับ) มีอะไรอีกบ้าง? แก้ไข : สมมติว่าแอปพลิเคชันนั้นขึ้นอยู่กับ Qt
185 c++  qt  stl 

10
ฉันจะใช้คอนเทนเนอร์ STL ใดในสถานการณ์ใด
ฉันอ่านค่า STL ในหนังสือของฉันบน C ++ โดยเฉพาะในส่วนของ STL และคอนเทนเนอร์ ตอนนี้ฉันเข้าใจแต่ละคนทุกคนมีคุณสมบัติเฉพาะของตัวเองและฉันใกล้จะจดจำพวกเขาทั้งหมด ... แต่สิ่งที่ฉันยังไม่เข้าใจคือสิ่งที่พวกเขาใช้ คำอธิบายคืออะไร รหัสตัวอย่างเป็นที่ต้องการมาก




6
วิธีการเริ่มต้น std :: vector จากอาร์เรย์ C-style?
วิธีที่ถูกที่สุดในการเริ่มต้นstd::vectorอาร์เรย์จาก C-style คืออะไร? ตัวอย่าง: ในคลาสต่อไปนี้ฉันมีvectorแต่เนื่องจากข้อ จำกัด ภายนอกข้อมูลจะถูกส่งผ่านเป็นอาร์เรย์สไตล์ C: class Foo { std::vector<double> w_; public: void set_data(double* w, int len){ // how to cheaply initialize the std::vector? } เห็นได้ชัดว่าผมสามารถโทรและห่วงแล้วกว่าองค์ประกอบหรือโทรw_.resize() std::copy()มีวิธีการที่ดีกว่านี้ไหม?
174 c++  arrays  vector  stl 

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