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

ไลบรารีมาตรฐาน C ++ และเนมสเปซ ใช้ร่วมกับ [c ++]

30
ทำไม“ ใช้ namespace std;” ถือว่าเป็นการปฏิบัติที่ไม่ดี?
ฉันได้รับการบอกเล่าจากคนอื่นว่าการเขียน using namespace std;ในรหัสที่เป็นธรรมและที่ฉันควรใช้std::coutและstd::cinโดยตรงแทน เหตุใดจึงusing namespace std;ถือว่าเป็นวิธีปฏิบัติที่ไม่ดี มันไม่มีประสิทธิภาพหรือมีความเสี่ยงในการประกาศตัวแปรที่ไม่ชัดเจน (ตัวแปรที่ใช้ชื่อเดียวกันกับฟังก์ชั่นในstdเนมสเปซ)? มันส่งผลกระทบต่อประสิทธิภาพหรือไม่

19
จะทราบได้อย่างไรว่ารายการนั้นมีอยู่ใน std :: vector หรือไม่?
สิ่งที่ฉันต้องการทำคือการตรวจสอบว่ามีองค์ประกอบอยู่ในเวกเตอร์หรือไม่ดังนั้นฉันจึงสามารถจัดการกับแต่ละกรณีได้ if ( item_present ) do_this(); else do_that();
616 c++  vector  std 

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 และมันก็ทำให้เข้าใจผิด …

12
คุณสามารถลบองค์ประกอบออกจากรายการ std :: ในขณะที่วนซ้ำมันได้หรือไม่?
ฉันมีรหัสที่มีลักษณะดังนี้: for (std::list<item*>::iterator i=items.begin();i!=items.end();i++) { bool isActive = (*i)->update(); //if (!isActive) // items.remove(*i); //else other_code_involving(*i); } items.remove_if(CheckItemNotActive); ฉันต้องการลบรายการที่ไม่ใช้งานทันทีหลังจากอัปเดตพวกเขาเพื่อหลีกเลี่ยงการเดินรายการอีกครั้ง แต่ถ้าฉันเพิ่มบรรทัดที่ถูกคอมเม้นท์ออกฉันจะได้รับข้อผิดพลาดเมื่อไปถึงi++: "List iterator ไม่สามารถเพิ่มได้" ฉันลองใช้ตัวเลือกอื่นซึ่งไม่ได้เพิ่มในคำสั่ง for แต่ฉันไม่สามารถทำงานอะไรได้ เป็นวิธีที่ดีที่สุดในการลบรายการในขณะที่คุณกำลังเดินรายการ std :: อะไร
239 c++  list  std 

4
ทำไมฉันถึงต้องใช้ push_back แทน emplace_back
C ++ 11 emplace_backเวกเตอร์ที่มีฟังก์ชั่นใหม่ ซึ่งแตกต่างจากpush_backอาศัยการเพิ่มประสิทธิภาพของคอมไพเลอร์เพื่อหลีกเลี่ยงการคัดลอกemplace_backใช้การส่งต่อที่สมบูรณ์แบบเพื่อส่งข้อโต้แย้งโดยตรงไปที่นวกรรมิกเพื่อสร้างวัตถุในสถานที่ ดูเหมือนว่าฉันemplace_backจะทำทุกอย่างpush_backได้ แต่บางครั้งมันก็ทำได้ดีกว่า (แต่ไม่เคยแย่ลง) ฉันต้องใช้เหตุผลpush_backอะไร
232 c++  c++11  std 

3
cout ไม่ใช่สมาชิกของ std
ฉันกำลังฝึกใช้ไฟล์ mulitple และไฟล์ส่วนหัวเป็นต้นดังนั้นฉันจึงมีโครงการนี้ซึ่งใช้ตัวเลขสองตัวแล้วเพิ่มเข้าไป ค่อนข้างง่าย นี่คือไฟล์ของฉัน: main.cpp #include <iostream> #include "add.h" int main() { int x = readNumber(); int y = readNumber(); writeAnswer(x + y); return(0); } io.cpp int readNumber() { int x; std::cout << "Number: "; std::cin >> x; return x; } void writeAnswer(int x) { std::cout << "Answer: "; …
200 c++  io  std  member  cout 

14
แทนที่ส่วนหนึ่งของสตริงด้วยสตริงอื่น
เป็นไปได้ใน C ++ เพื่อแทนที่ส่วนหนึ่งของสตริงด้วยสตริงอื่น? โดยทั่วไปฉันต้องการทำสิ่งนี้: QString string("hello $name"); string.replace("$name", "Somename"); แต่ฉันต้องการใช้ไลบรารี C ++ มาตรฐาน
186 c++  string  replace  substring  std 

16
C อ่านไฟล์ทีละบรรทัด
ฉันเขียนฟังก์ชันนี้เพื่ออ่านบรรทัดจากไฟล์: const char *readLine(FILE *file) { if (file == NULL) { printf("Error: file pointer is null."); exit(1); } int maximumLineLength = 128; char *lineBuffer = (char *)malloc(sizeof(char) * maximumLineLength); if (lineBuffer == NULL) { printf("Error allocating memory for line buffer."); exit(1); } char ch = getc(file); int count = 0; …
184 c  file-io  line  std 

16
ตัวอย่างที่น่าสนใจของตัวจัดสรร C ++ แบบกำหนดเอง
อะไรคือเหตุผลที่ดีในการทิ้งstd::allocatorโซลูชันที่ปรับแต่งเอง? คุณเคยเจอกับสถานการณ์ที่จำเป็นสำหรับความถูกต้องประสิทธิภาพความสามารถในการปรับขยายและอื่น ๆ หรือไม่? ตัวอย่างที่ฉลาดจริงๆ ตัวจัดสรรแบบกำหนดเองนั้นเป็นคุณสมบัติของไลบรารีมาตรฐานที่ฉันไม่ต้องการมาก ฉันแค่สงสัยว่าคนที่อยู่ใน SO สามารถให้ตัวอย่างที่น่าสนใจเพื่อพิสูจน์การมีอยู่ของพวกเขา

7
printf with std :: string?
ความเข้าใจของฉันคือว่าstringเป็นสมาชิกของstdnamespace ดังนั้นทำไมต่อไปนี้เกิดขึ้น #include <iostream> int main() { using namespace std; string myString = "Press ENTER to quit program!"; cout << "Come up and C++ me some time." << endl; printf("Follow this command: %s", myString); cin.get(); return 0; } แต่ละครั้งที่โปรแกรมทำงานmyStringพิมพ์สตริงสุ่มที่ดูเหมือนว่า 3 ตัวอักษรเช่นในเอาต์พุตด้านบน
157 c++  string  namespaces  printf  std 

8
การลบองค์ประกอบออกจาก std :: set ในขณะที่วนซ้ำ
ฉันต้องผ่านชุดและลบองค์ประกอบที่ตรงตามเกณฑ์ที่กำหนดไว้ล่วงหน้า นี่คือรหัสทดสอบที่ฉันเขียน: #include <set> #include <algorithm> void printElement(int value) { std::cout << value << " "; } int main() { int initNum[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; std::set<int> numbers(initNum, initNum + 10); // print '0 1 2 3 4 5 6 7 …


5
ฉันควรใช้ std :: function หรือ function pointer ใน C ++ หรือไม่
เมื่อใช้ฟังก์ชั่นการโทรกลับใน C ++ ฉันควรจะใช้ตัวชี้ฟังก์ชั่น C-style: void (*callbackFunc)(int); หรือฉันควรใช้ประโยชน์จากฟังก์ชั่น std :: std::function< void(int) > callbackFunc;
142 c++  function  c++11  callback  std 

7
stdlib และเอาต์พุตสีใน C
ฉันกำลังสร้างแอปพลิเคชั่นง่ายๆที่ต้องการเอาต์พุตสี ฉันจะทำให้ผลลัพธ์ของฉันเป็นสีเช่น emacs และ bash ได้อย่างไร? ฉันไม่สนใจ Windows เนื่องจากแอปพลิเคชันของฉันใช้สำหรับระบบ UNIX เท่านั้น
125 c  colors  std  stdio 

8
เมื่อใช้ส่วนหัว C ใน C ++ เราควรใช้ฟังก์ชันจาก std :: หรือ global namespace หรือไม่?
C ค่อนข้างไม่ตรงบางส่วนของ C ++ ดังนั้นเราจึงสามารถใช้ฟังก์ชัน / ส่วนหัว C ส่วนใหญ่ใน C ++ ได้โดยเปลี่ยนชื่อเล็กน้อย ( stdio.hto cstdio, stdlib.hto cstdlib) คำถามของฉันเป็นความหมายจริงๆ ในรหัส C ++ (โดยใช้คอมไพเลอร์ GCC เวอร์ชันใหม่ล่าสุด) ฉันสามารถโทรได้printf("Hello world!");และstd::printf("Hello world!");ทำงานได้เหมือนกันทุกประการ std::printf("Hello world!");และในการอ้างอิงฉันใช้มันก็จะปรากฏเป็น คำถามของฉันคือต้องการใช้std::printf();ใน C ++ หรือไม่? มีความแตกต่างหรือไม่?
113 c++  language-lawyer  std 

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