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

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

11
ฉันจะลบรายการออกจากเวกเตอร์ stl ด้วยค่าที่แน่นอนได้อย่างไร
ฉันดูเอกสาร API สำหรับ stl vector และสังเกตว่าไม่มีวิธีในคลาสเวกเตอร์ที่อนุญาตให้ลบองค์ประกอบด้วยค่าที่แน่นอน ดูเหมือนว่าเป็นการดำเนินการทั่วไปและดูเหมือนแปลกที่ไม่มีวิธีการทำเช่นนี้
145 c++  stl 


6
ฉันจะระบุตัวชี้ไปยังฟังก์ชันที่โอเวอร์โหลดได้อย่างไร
ฉันต้องการส่งผ่านฟังก์ชันที่มากเกินไปไปยังstd::for_each()อัลกอริทึม ตัวอย่างเช่น, class A { void f(char c); void f(int i); void scan(const std::string& s) { std::for_each(s.begin(), s.end(), f); } }; ฉันคาดหวังว่าคอมไพลเลอร์จะแก้ไขf()ตามประเภทตัววนซ้ำ เห็นได้ชัดว่ามัน (GCC 4.1.2) ไม่ได้ทำ ฉันจะระบุสิ่งที่f()ฉันต้องการได้อย่างไร?
139 c++  stl 

3
จะเกิดอะไรขึ้นถ้าคุณเรียกลบ () บนองค์ประกอบแผนที่ในขณะที่ทำซ้ำตั้งแต่ต้นจนจบ
ในรหัสต่อไปนี้ฉันวนลูปผ่านแผนที่และทดสอบว่าจำเป็นต้องลบองค์ประกอบหรือไม่ ปลอดภัยหรือไม่ที่จะลบองค์ประกอบและทำซ้ำต่อไปหรือฉันต้องรวบรวมคีย์ในคอนเทนเนอร์อื่นและทำลูปที่สองเพื่อเรียกการลบ () map<string, SerialdMsg::SerialFunction_t>::iterator pm_it; for (pm_it = port_map.begin(); pm_it != port_map.end(); pm_it++) { if (pm_it->second == delete_this_id) { port_map.erase(pm_it->first); } } UPDATE: แน่นอนจากนั้นฉันก็อ่านคำถามนี้ซึ่งฉันไม่คิดว่าจะเกี่ยวข้อง แต่ตอบคำถามของฉัน
134 c++  stl  iterator 

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

2
จะกำหนดขนาดเริ่มต้นของ std :: vector ได้อย่างไร?
ฉันมีvector<CustomClass*>และฉันใส่รายการจำนวนมากในเวกเตอร์และฉันต้องการการเข้าถึงที่รวดเร็วดังนั้นฉันจึงไม่ใช้รายการ จะกำหนดขนาดเริ่มต้นของเวกเตอร์ได้อย่างไร (ตัวอย่างเช่นเป็น 20,000 ตำแหน่งเพื่อหลีกเลี่ยงการคัดลอกเมื่อฉันแทรกใหม่)
130 c++  stl 

7
ทำไมไม่ std :: que :: pop return value.?
ฉันอ่านหน้านี้แต่ฉันไม่สามารถหาเหตุผลเดียวกันได้ มีการกล่าวถึงว่า "มันสมเหตุสมผลกว่าที่จะไม่ส่งคืนค่าใด ๆ เลยและต้องการให้ไคลเอ็นต์ใช้ front () เพื่อตรวจสอบค่าที่ด้านหน้าของคิว" แต่การตรวจสอบองค์ประกอบจาก front () จำเป็นต้องคัดลอกองค์ประกอบนั้นด้วยค่า lvalue ตัวอย่างเช่นในส่วนรหัสนี้ std::queue<int> myqueue; int myint; int result; std::cin >> myint; myqueue.push (myint); / * ที่นี่ชั่วคราวจะถูกสร้างขึ้นบน RHS ซึ่งจะถูกกำหนดให้กับผลลัพธ์และในกรณีที่หากส่งคืนโดยการอ้างอิงผลลัพธ์จะถูกแสดงผลไม่ถูกต้องหลังจากการดำเนินการป๊อป * / result = myqueue.front(); //result. std::cout << ' ' << result; myqueue.pop(); บนวัตถุcoutบรรทัดที่ห้าก่อนสร้างสำเนา myqueue.front () จากนั้นกำหนดให้เป็นผลลัพธ์ ดังนั้นความแตกต่างคืออะไรฟังก์ชันป๊อปสามารถทำสิ่งเดียวกันได้
123 c++  stl 

10
คุณคัดลอกเนื้อหาของอาร์เรย์ไปยัง std :: vector ใน C ++ โดยไม่ต้องวนซ้ำได้อย่างไร
ฉันมีอาร์เรย์ของค่าที่ส่งผ่านไปยังฟังก์ชันของฉันจากส่วนอื่นของโปรแกรมที่ฉันต้องการเก็บไว้เพื่อประมวลผลในภายหลัง เนื่องจากฉันไม่รู้ว่าฟังก์ชันของฉันจะถูกเรียกกี่ครั้งก่อนถึงเวลาประมวลผลข้อมูลฉันจึงต้องการโครงสร้างการจัดเก็บแบบไดนามิกดังนั้นฉันจึงเลือกไฟล์std::vector. ฉันไม่ต้องการให้มีการทำวงมาตรฐานค่าทั้งหมดเป็นรายบุคคลก็จะดีถ้าฉันสามารถคัดลอกทั้งหมดโดยใช้สิ่งที่คล้ายกับpush_backmemcpy
123 c++  stl  vector  copy 



13
remove_if เทียบเท่าสำหรับ std :: map
ฉันพยายามลบองค์ประกอบต่างๆออกจากแผนที่ตามเงื่อนไขเฉพาะ ฉันจะทำได้อย่างไรโดยใช้อัลกอริทึม STL เริ่มแรกฉันคิดว่าจะใช้ remove_ifแต่เป็นไปไม่ได้เนื่องจาก remove_if ใช้ไม่ได้กับคอนเทนเนอร์ที่เชื่อมโยง มีอัลกอริทึมที่เทียบเท่า "remove_if" ที่ใช้ได้กับแผนที่หรือไม่ ในฐานะตัวเลือกง่ายๆฉันคิดว่าจะวนลูปผ่านแผนที่และลบ แต่กำลังวนรอบแผนที่และลบตัวเลือกที่ปลอดภัยหรือไม่ (เนื่องจากตัวทำซ้ำไม่ถูกต้องหลังจากลบ) ฉันใช้ตัวอย่างต่อไปนี้: bool predicate(const std::pair<int,std::string>& x) { return x.first > 2; } int main(void) { std::map<int, std::string> aMap; aMap[2] = "two"; aMap[3] = "three"; aMap[4] = "four"; aMap[5] = "five"; aMap[6] = "six"; // does not work, an …
118 c++  stl  map 

4
วิธีการนำ ostringstream กลับมาใช้ใหม่
ฉันต้องการล้างข้อมูลและนำ ostringstream กลับมาใช้ใหม่ (และบัฟเฟอร์พื้นฐาน) เพื่อที่แอปของฉันจะได้ไม่ต้องทำการจัดสรรให้มากนัก ฉันจะรีเซ็ตวัตถุเป็นสถานะเริ่มต้นได้อย่างไร
117 c++  stl  reset  ostringstream 

4
วิธีโอเวอร์โหลด std :: swap ()
std::swap()ถูกใช้โดยคอนเทนเนอร์มาตรฐานจำนวนมาก (เช่นstd::listและstd::vector) ในระหว่างการเรียงลำดับและแม้กระทั่งการกำหนด แต่การนำ std ไปใช้swap()นั้นเป็นแบบทั่วไปและค่อนข้างไม่มีประสิทธิภาพสำหรับประเภทที่กำหนดเอง ดังนั้นประสิทธิภาพจะได้รับจากการโอเวอร์โหลดstd::swap()ด้วยการใช้งานเฉพาะประเภทที่กำหนดเอง แต่คุณจะใช้มันได้อย่างไรเพื่อให้ std container ใช้?

9
วิธีที่ต้องการ / สำนวนในการแทรกลงในแผนที่คืออะไร?
ฉันได้ระบุสี่วิธีในการแทรกองค์ประกอบลงใน a std::map: std::map<int, int> function; function[0] = 42; function.insert(std::map<int, int>::value_type(0, 42)); function.insert(std::pair<int, int>(0, 42)); function.insert(std::make_pair(0, 42)); วิธีใดที่เป็นที่ต้องการ / สำนวน? (และมีวิธีอื่นที่ฉันคิดไม่ถึง?)
115 c++  stl  insert  stdmap  std-pair 

5
การเข้าถึงแผนที่ C ++ ละทิ้งคุณสมบัติ (const)
รหัสต่อไปนี้ระบุว่าการส่งผ่านแผนที่constในoperator[]เมธอดจะละทิ้งคุณสมบัติ: #include <iostream> #include <map> #include <string> using namespace std; class MapWrapper { public: const int &get_value(const int &key) const { return _map[key]; } private: map<int, int> _map; }; int main() { MapWrapper mw; cout << mw.get_value(42) << endl; return 0; } นี่เป็นเพราะการจัดสรรที่เป็นไปได้ที่เกิดขึ้นในการเข้าถึงแผนที่หรือไม่? ไม่สามารถประกาศฟังก์ชันที่มีการเข้าถึงแผนที่ได้หรือไม่ MapWrapper.cpp:10: error: passing ‘const std::map<int, int, …
113 c++  stl  const  maps 

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