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

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


9
ฉันจะหาอัลกอริธึมการค้นหาไบนารี C ++ ที่“ มีประโยชน์” ได้จากที่ใด
ฉันต้องการอัลกอริทึมการค้นหาแบบไบนารีที่เข้ากันได้กับคอนเทนเนอร์ C ++ STL บางอย่างเช่นstd::binary_searchใน<algorithm>ส่วนหัวของไลบรารีมาตรฐานแต่ฉันต้องการให้มันส่งคืนตัววนซ้ำที่ชี้ไปที่ผลลัพธ์ไม่ใช่บูลีนธรรมดาที่บอกฉันว่ามีองค์ประกอบอยู่หรือไม่ (โปรดทราบว่าคณะกรรมการมาตรฐานคิดอะไรอยู่เมื่อพวกเขากำหนด API สำหรับ binary_search!) ข้อกังวลหลักของฉันที่นี่คือฉันต้องการความเร็วของการค้นหาแบบไบนารีดังนั้นแม้ว่าฉันจะสามารถค้นหาข้อมูลด้วยอัลกอริทึมอื่น ๆ ดังที่ได้กล่าวไว้ด้านล่าง แต่ฉันต้องการใช้ประโยชน์จากข้อเท็จจริงที่ว่าข้อมูลของฉันถูกจัดเรียงเพื่อให้ได้ประโยชน์จากไบนารี ค้นหาไม่ใช่การค้นหาเชิงเส้น จนถึงตอนนี้lower_boundและupper_boundล้มเหลวหากไม่มีข้อมูล: //lousy pseudo code vector(1,2,3,4,6,7,8,9,0) //notice no 5 iter = lower_bound_or_upper_bound(start,end,5) iter != 5 && iter !=end //not returning end as usual, instead it'll return 4 or 6 หมายเหตุ:ฉันยังใช้อัลกอริทึมที่ไม่ได้เป็นของเนมสเปซมาตรฐานตราบใดที่เข้ากันได้กับคอนเทนเนอร์ ชอบพูดboost::binary_search.

5
ใช้ std :: set comparator ที่กำหนดเอง
Наэтотвопросестьответына Stack Overflow нарусском : Компаратордля set ฉันพยายามเปลี่ยนลำดับเริ่มต้นของรายการในชุดจำนวนเต็มให้เป็นพจนานุกรมแทนตัวเลขและฉันไม่สามารถรวบรวมสิ่งต่อไปนี้ด้วย g ++: file.cpp: bool lex_compare(const int64_t &a, const int64_t &b) { stringstream s1,s2; s1 << a; s2 << b; return s1.str() < s2.str(); } void foo() { set<int64_t, lex_compare> s; s.insert(1); ... } ฉันได้รับข้อผิดพลาดต่อไปนี้: error: type/value mismatch at argument 2 in template …
109 c++  stl 


6
เหตุใดจึงส่งคืน 'เวกเตอร์' จากฟังก์ชันได้
โปรดพิจารณารหัสนี้ ฉันเคยเห็นรหัสประเภทนี้หลายครั้ง wordsเป็นเวกเตอร์ท้องถิ่น เป็นไปได้อย่างไรที่จะส่งคืนจากฟังก์ชัน เรารับประกันได้ไหมว่ามันจะไม่ตาย? std::vector<std::string> read_file(const std::string& path) { std::ifstream file("E:\\names.txt"); if (!file.is_open()) { std::cerr << "Unable to open file" << "\n"; std::exit(-1); } std::vector<string> words;//this vector will be returned std::string token; while (std::getline(file, token, ',')) { words.push_back(token); } return words; }

4
ฉันจะส่งผ่านวัตถุอย่างปลอดภัยโดยเฉพาะวัตถุ STL เข้าและออกจาก DLL ได้อย่างไร
ฉันจะส่งผ่านคลาสออบเจ็กต์โดยเฉพาะออบเจ็กต์ STL ไปยังและจาก C ++ DLL ได้อย่างไร แอปพลิเคชันของฉันต้องโต้ตอบกับปลั๊กอินของบุคคลที่สามในรูปแบบของไฟล์ DLL และฉันไม่สามารถควบคุมได้ว่าปลั๊กอินเหล่านี้สร้างขึ้นด้วยคอมไพเลอร์ใด ฉันทราบว่าไม่มี ABI ที่รับประกันสำหรับออบเจ็กต์ STL และฉันกังวลว่าจะทำให้แอปพลิเคชันของฉันไม่เสถียร
107 c++  windows  dll  stl  abi 

6
เหตุใดเวกเตอร์ <bool> จึงไม่เป็นคอนเทนเนอร์ STL
รายการที่ 18 ของสกอตต์เมเยอร์สหนังสือSTL มีผลบังคับใช้ 50 วิธีที่เฉพาะเจาะจงในการปรับปรุงการใช้งานของคุณของไลบรารีแม่แบบมาตรฐานกล่าวว่าเพื่อหลีกเลี่ยงการvector &lt;bool&gt;ที่มันไม่ได้เป็นภาชนะ STL และมันไม่ได้โดดถือbools รหัสต่อไปนี้: vector &lt;bool&gt; v; bool *pb =&amp;v[0]; จะไม่คอมไพล์ละเมิดข้อกำหนดของคอนเทนเนอร์ STL ข้อผิดพลาด: cannot convert 'std::vector&lt;bool&gt;::reference* {aka std::_Bit_reference*}' to 'bool*' in initialization vector&lt;T&gt;::operator []return type ควรจะเป็นT&amp;แต่ทำไมถึงเป็นกรณีพิเศษสำหรับvector&lt;bool&gt;? อะไรvector&lt;bool&gt;จริงๆประกอบด้วย? รายการกล่าวเพิ่มเติมว่า: deque&lt;bool&gt; v; // is a STL container and it really contains bools สามารถใช้เป็นทางเลือกอื่นได้vector&lt;bool&gt;หรือไม่? ใครช่วยอธิบายเรื่องนี้ได้ไหม

10
เหตุใด std :: set จึงไม่มีฟังก์ชันสมาชิก“ ประกอบด้วย”
ฉันใช้งานหนักstd::set&lt;int&gt;และบ่อยครั้งฉันต้องตรวจสอบว่าชุดดังกล่าวมีตัวเลขหรือไม่ ฉันคิดว่ามันเป็นธรรมชาติที่จะเขียน: if (myset.contains(number)) ... แต่เนื่องจากไม่มีcontainsสมาชิกฉันจึงต้องเขียนสิ่งที่ยุ่งยาก: if (myset.find(number) != myset.end()) .. หรือไม่ชัดเจนเท่า: if (myset.count(element) &gt; 0) .. มีเหตุผลในการตัดสินใจออกแบบนี้หรือไม่?
103 c++  stl  stdset 

6
สตริง c_str () กับ data ()
ฉันได้อ่านสถานที่หลายแห่งที่ความแตกต่างระหว่างc_str()และdata()(ใน STL และการใช้งานอื่น ๆ ) นั้นc_str()จะถูกยกเลิกเสมอในขณะที่data()ไม่ใช่ เท่าที่ผมได้เห็นในการใช้งานที่เกิดขึ้นจริงที่พวกเขาจะทำเหมือนกันหรือโทรdata()c_str() ฉันพลาดอะไรไปที่นี่? ข้อใดถูกต้องมากกว่าในการใช้ในสถานการณ์ใด
103 c++  stl  c-str 

2
คลาสข้อยกเว้นใดบ้างที่อยู่ในไลบรารี C ++ มาตรฐาน
คลาสข้อยกเว้นที่รวมอยู่ในไลบรารี C ++ มาตรฐานคืออะไรและควรใช้ทำอะไร ฉันรู้ว่ามีข้อยกเว้น C ++ 11 ใหม่ ๆ อยู่บ้าง แต่ฉันไม่แน่ใจว่ามันคืออะไรหรืออยู่ที่ไหน
102 c++  exception  c++11  stl 

5
การลบองค์ประกอบจากเวกเตอร์
ฉันต้องการล้างองค์ประกอบจากเวกเตอร์โดยใช้วิธีการลบ แต่ปัญหาที่นี่คือไม่รับประกันว่าองค์ประกอบจะเกิดขึ้นเพียงครั้งเดียวในเวกเตอร์ อาจมีอยู่หลายครั้งและฉันจำเป็นต้องล้างทั้งหมด รหัสของฉันเป็นดังนี้: void erase(std::vector&lt;int&gt;&amp; myNumbers_in, int number_in) { std::vector&lt;int&gt;::iterator iter = myNumbers_in.begin(); std::vector&lt;int&gt;::iterator endIter = myNumbers_in.end(); for(; iter != endIter; ++iter) { if(*iter == number_in) { myNumbers_in.erase(iter); } } } int main(int argc, char* argv[]) { std::vector&lt;int&gt; myNmbers; for(int i = 0; i &lt; 2; ++i) { myNmbers.push_back(i); …
102 c++  vector  stl  erase 

4
การเข้าถึงองค์ประกอบแผนที่ C ++ const
ฉันพยายามใช้ตัวดำเนินการ [] เข้าถึงองค์ประกอบในแมป const C ++ แต่วิธีนี้ล้มเหลว ฉันยังพยายามใช้ "at ()" เพื่อทำสิ่งเดียวกัน มันได้ผลในครั้งนี้ อย่างไรก็ตามฉันไม่พบข้อมูลอ้างอิงใด ๆ เกี่ยวกับการใช้ "at ()" เพื่อเข้าถึงองค์ประกอบในแผนที่ const C ++ "at ()" เป็นฟังก์ชันที่เพิ่มใหม่ในแผนที่ C ++ หรือไม่ ฉันจะหาข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ที่ไหน ขอบคุณมาก! ตัวอย่างอาจเป็นดังต่อไปนี้: #include &lt;iostream&gt; #include &lt;map&gt; using namespace std; int main() { map&lt;int, char&gt; A; A[1] = 'b'; A[3] = 'c'; const …
102 c++  stl  map  const 

2
เหตุใด std :: ssize () จึงถูกนำมาใช้ใน C ++ 20
C ++ 20แนะนำstd::ssize()ฟังก์ชันฟรีดังต่อไปนี้: template &lt;class C&gt; constexpr auto ssize(const C&amp; c) -&gt; std::common_type_t&lt;std::ptrdiff_t, std::make_signed_t&lt;decltype(c.size())&gt;&gt;; ดูเหมือนการใช้งานที่เป็นไปได้จะใช้static_castเพื่อแปลงค่าส่งคืนของsize()ฟังก์ชันสมาชิกของ cl ass Cเป็นคู่ที่ลงนาม เนื่องจากsize()ฟังก์ชันสมาชิกของ C จะส่งกลับค่าที่ไม่ใช่ค่าลบเสมอเหตุใดใคร ๆ จึงต้องการเก็บไว้ในตัวแปรที่ลงชื่อ static_castในกรณีที่ต้องการจริงๆมันเป็นเรื่องของความเรียบง่าย เหตุใดจึงถูกstd::ssize()นำมาใช้ใน C ++ 20
101 c++  stl  unsigned  signed  c++20 

3
การใช้งาน gcc std :: unordered_map ช้าหรือไม่ ถ้าเป็นเช่นนั้น - ทำไม?
เรากำลังพัฒนาซอฟต์แวร์สำคัญที่มีประสิทธิภาพสูงใน C ++ ที่นั่นเราต้องมีแผนที่แฮชพร้อมกันและนำไปใช้ std::unordered_mapดังนั้นเราจึงเขียนมาตรฐานที่จะคิดออกเท่าไหร่ช้ากว่าแผนที่กัญชาพร้อมกันของเราจะถูกเมื่อเทียบกับ แต่std::unordered_mapดูเหมือนว่าจะไม่น่าเชื่อช้า ... ดังนั้นนี้เป็นของเราไมโครมาตรฐาน (สำหรับแผนที่พร้อมกันเรากลับกลายเป็นหัวข้อใหม่เพื่อให้แน่ใจว่าการล็อคไม่ได้รับการปรับให้เหมาะสมออกไปและทราบว่าฉันไม่เคย Inser 0 เพราะผมยังมาตรฐานด้วยgoogle::dense_hash_map, ซึ่งต้องการค่า null): boost::random::mt19937 rng; boost::random::uniform_int_distribution&lt;&gt; dist(std::numeric_limits&lt;uint64_t&gt;::min(), std::numeric_limits&lt;uint64_t&gt;::max()); std::vector&lt;uint64_t&gt; vec(SIZE); for (int i = 0; i &lt; SIZE; ++i) { uint64_t val = 0; while (val == 0) { val = dist(rng); } vec[i] = val; } std::unordered_map&lt;int, long …

8
อะไรคือความแตกต่างระหว่างคอนเทนเนอร์ deque และ list STL?
อะไรคือความแตกต่างระหว่างทั้งสอง? ฉันหมายถึงวิธีการทั้งหมดเหมือนกัน ดังนั้นสำหรับผู้ใช้พวกเขาทำงานเหมือนกัน ถูกต้องหรือไม่ ??
98 c++  list  stl  deque 

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