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

C ++ เป็นภาษาโปรแกรมทั่วไป เดิมได้รับการออกแบบให้เป็นส่วนขยายของ C และมีไวยากรณ์ที่คล้ายกัน แต่ตอนนี้มันเป็นภาษาที่แตกต่างอย่างสิ้นเชิง ใช้แท็กนี้สำหรับคำถามเกี่ยวกับรหัส (จะ) คอมไพล์ด้วยคอมไพเลอร์ C ++ ใช้แท็กเฉพาะรุ่นสำหรับคำถามที่เกี่ยวข้องกับการแก้ไขมาตรฐานเฉพาะ [C ++ 11], [C ++ 14], [C ++ 17] หรือ [C ++ 20] เป็นต้น



5
std :: vector กับ std :: array ใน C ++
อะไรคือความแตกต่างระหว่าง a std::vectorและstd::arrayc ++ เมื่อใดที่หนึ่งควรจะชอบมากกว่าอีก ข้อดีและข้อเสียของแต่ละข้อคืออะไร? ตำราเรียนของฉันทั้งหมดคือรายการที่เหมือนกัน
283 c++  arrays  vector 


18
จะพิมพ์เนื้อหาของเวกเตอร์ได้อย่างไร?
ฉันต้องการพิมพ์เนื้อหาของเวกเตอร์ใน C ++ นี่คือสิ่งที่ฉันมี: #include <iostream> #include <fstream> #include <string> #include <cmath> #include <vector> #include <sstream> #include <cstdio> using namespace std; int main() { ifstream file("maze.txt"); if (file) { vector<char> vec(istreambuf_iterator<char>(file), (istreambuf_iterator<char>())); vector<char> path; int x = 17; char entrance = vec.at(16); char firstsquare = vec.at(x); if (entrance == 'S') …
282 c++  vector  output  stdvector  cout 

18
เหตุผลของการยกเลิกสตริงเป็นโมฆะคืออะไร?
เท่าที่ฉันรัก C และ C ++ ฉันไม่สามารถช่วย แต่เกาหัวของฉันในการเลือกสตริงที่สิ้นสุดด้วยค่า null: มีความยาวนำหน้าสตริง (เช่น Pascal) ที่มีอยู่ก่อนหน้า C สตริงที่มีคำนำหน้าความยาวทำให้อัลกอริทึมหลายอย่างเร็วขึ้นโดยอนุญาตให้ค้นหาความยาวของเวลาคงที่ สตริงที่มีคำนำหน้าความยาวทำให้ยากต่อการทำให้เกิดข้อผิดพลาดบัฟเฟอร์เกิน แม้บนเครื่อง 32 บิตหากคุณอนุญาตให้สตริงเป็นขนาดของหน่วยความจำที่มีอยู่สตริงที่ขึ้นต้นความยาวจะมีความกว้างเพียงสามไบต์กว้างกว่าสตริงที่สิ้นสุดด้วยค่า null บนเครื่อง 16 บิตนี่เป็นไบต์เดียว บนเครื่อง 64 บิต 4GB เป็นขีดจำกัดความยาวของสตริงที่เหมาะสม แต่แม้ว่าคุณต้องการขยายให้มีขนาดของคำว่าเครื่องเครื่อง 64 บิตมักจะมีหน่วยความจำเพียงพอที่จะทำให้อาร์กิวเมนต์ที่เจ็ดมีค่าเพิ่มขึ้นอีกเจ็ดไบต์ ฉันรู้ว่ามาตรฐาน C ดั้งเดิมเขียนขึ้นสำหรับเครื่องที่ไม่ดีอย่างบ้าคลั่ง (ในแง่ของหน่วยความจำ) แต่อาร์กิวเมนต์ประสิทธิภาพไม่ได้ขายที่นี่ ค่อนข้างทุกภาษาอื่น ๆ (เช่น Perl, Pascal, Python, Java, C #, ฯลฯ ) ใช้สตริงคำนำหน้าความยาว ภาษาเหล่านี้มักจะเอาชนะ C ในมาตรฐานการจัดการสตริงเพราะพวกเขามีประสิทธิภาพมากขึ้นด้วยสตริง …
281 c++  c  string  null-terminated 

5
เครื่องหมายคำพูดเดี่ยวทำใน C ++ เมื่อใช้กับอักขระหลายตัวได้อย่างไร
ฉันอยากรู้เกี่ยวกับรหัสนี้: cout << 'test'; // Note the single quotes. 1952805748ให้ฉันเอาท์พุทของ คำถามของฉัน: เอาท์พุทที่อยู่ในหน่วยความจำหรืออะไร?
279 c++  quotes 

16
การเริ่มต้นโครงสร้าง C ++
เป็นไปได้ที่จะเริ่มต้น structs ใน C ++ ตามที่ระบุไว้ด้านล่าง struct address { int street_no; char *street_name; char *city; char *prov; char *postal_code; }; address temp_address = { .city = "Hamilton", .prov = "Ontario" }; ลิงก์ที่นี่และที่นี่พูดถึงว่าเป็นไปได้ที่จะใช้สไตล์นี้เฉพาะใน C เท่านั้นถ้าเป็นเช่นนั้นทำไมจึงไม่สามารถใช้ C ++ ได้? มีเหตุผลทางเทคนิคที่แฝงอยู่หรือไม่ว่าทำไมมันจึงไม่ถูกนำไปใช้ใน C ++ หรือเป็นวิธีปฏิบัติที่ไม่ดีที่จะใช้สไตล์นี้ ฉันชอบใช้วิธีการเริ่มต้นนี้เนื่องจากโครงสร้างของฉันมีขนาดใหญ่และรูปแบบนี้ทำให้ฉันสามารถอ่านได้อย่างชัดเจนว่าค่าใดถูกกำหนดให้กับสมาชิกคนใด กรุณาแบ่งปันกับฉันหากมีวิธีอื่น ๆ ที่เราสามารถบรรลุการอ่านเดียวกัน ฉันได้อ้างอิงลิงค์ต่อไปนี้ก่อนโพสต์คำถามนี้ C / C ++ …
279 c++ 

9
ทำไมผู้คนถึงบอกว่ามีโมดูโล่แบบอคติเมื่อใช้ตัวสร้างตัวเลขสุ่ม?
ฉันได้เห็นคำถามนี้ถามมาก แต่ไม่เคยเห็นคำตอบที่เป็นรูปธรรมจริง ดังนั้นฉันจะโพสต์หนึ่งที่นี่ซึ่งหวังว่าจะช่วยให้ผู้คนเข้าใจว่าทำไมมี "modulo bias" เมื่อใช้ตัวสร้างตัวเลขสุ่มเช่นrand()ใน C ++

17
สมาชิกส่วนบุคคลและที่ได้รับการป้องกัน: C ++
ใครสามารถสอนฉันถึงความแตกต่างระหว่างprivateและprotectedสมาชิกในชั้นเรียนได้หรือไม่ ผมเข้าใจจากการประชุมการปฏิบัติที่ดีที่สุดที่ตัวแปรและฟังก์ชั่นที่ไม่ได้เรียกว่านอกชั้นเรียนควรจะทำprivate- แต่ฉันกำลังมองหาที่MFCโครงการMFCprotectedดูเหมือนว่าจะโปรดปราน อะไรคือความแตกต่างและสิ่งที่ฉันควรใช้
276 c++  class  mfc 

13
malloc () และ free () ทำงานอย่างไร
ฉันต้องการทราบวิธีการmallocและการfreeทำงาน int main() { unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char)); memset(p,0,4); strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes** cout << p; free(p); // Obvious Crash, but I need how it works and why crash. cout << p; return 0; } ฉันจะขอบคุณจริง ๆ ถ้าคำตอบอยู่ในระดับความลึกในระดับหน่วยความจำถ้าเป็นไปได้

8
ความแตกต่างใน make_shared และ shared_ptr ปกติใน C ++
std::shared_ptr<Object> p1 = std::make_shared<Object>("foo"); std::shared_ptr<Object> p2(new Object("foo")); Google และ StackOverflow โพสต์หลายคนจะมีเกี่ยวกับเรื่องนี้ แต่ผมไม่สามารถที่จะเข้าใจว่าทำไมจะมีประสิทธิภาพมากกว่าโดยตรงโดยใช้make_sharedshared_ptr ใครช่วยอธิบายฉันทีละขั้นตอนของวัตถุที่สร้างและการดำเนินการโดยทั้งสองเพื่อที่ฉันจะสามารถเข้าใจว่าmake_sharedมีประสิทธิภาพ ฉันได้ยกตัวอย่างหนึ่งตัวอย่างข้างต้นเพื่อการอ้างอิง
276 c++  c++11  shared-ptr 

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 

11
ฉันควรใช้คำหลักใหม่ใน C ++ เมื่อใด
ฉันใช้ C ++ มาระยะหนึ่งแล้วและฉันก็สงสัยเกี่ยวกับคำหลักใหม่ ฉันควรจะใช้หรือไม่? 1) ด้วยคำหลักใหม่ ... MyClass* myClass = new MyClass(); myClass->MyField = "Hello world!"; 2) ไม่มีคำหลักใหม่ ... MyClass myClass; myClass.MyField = "Hello world!"; จากมุมมองของการใช้งานพวกเขาดูเหมือนจะไม่แตกต่างกัน (แต่ฉันแน่ใจว่าพวกเขาเป็น) ... อย่างไรก็ตามภาษาหลักของฉันคือ C # และแน่นอนวิธีที่ 1 คือสิ่งที่ฉันคุ้นเคย ความยากดูเหมือนจะเป็นวิธีที่ 1 นั้นยากที่จะใช้กับคลาส std C ++ ฉันควรใช้วิธีใด อัปเดต 1: ฉันเพิ่งใช้คำหลักใหม่สำหรับหน่วยความจำฮีป (หรือที่เก็บสินค้าฟรี ) สำหรับอาร์เรย์ขนาดใหญ่ซึ่งอยู่นอกขอบเขต (เช่นถูกส่งคืนจากฟังก์ชัน) เมื่อก่อนที่ฉันใช้กองซ้อนซึ่งทำให้องค์ประกอบครึ่งหนึ่งเสียหายนอกขอบเขตเปลี่ยนเป็นการใช้ฮีปเพื่อให้แน่ใจว่าองค์ประกอบนั้นอยู่ในชั้นเชิง …

4
ความแตกต่างระหว่างวัตถุที่ใช้ร่วมกัน (.so), ไลบรารีแบบคงที่ (.a) และ DLL ของ (.so) หรือไม่
ฉันมีส่วนร่วมในการอภิปรายบางอย่างเกี่ยวกับห้องสมุดใน Linux และต้องการยืนยันบางสิ่ง มันเป็นความเข้าใจของฉัน (โปรดแก้ไขให้ฉันถ้าฉันผิดและฉันจะแก้ไขโพสต์ของฉันในภายหลัง) ว่ามีสองวิธีในการใช้ห้องสมุดเมื่อสร้างแอปพลิเคชัน: สแตติกไลบรารี (ไฟล์. a): ณ เวลาลิงก์สำเนาของไลบรารีทั้งหมดจะถูกใส่ลงในแอปพลิเคชันสุดท้ายเพื่อให้ฟังก์ชั่นภายในไลบรารีพร้อมใช้งานสำหรับแอปพลิเคชันการโทรตลอดเวลา วัตถุที่ใช้ร่วมกัน (ไฟล์. so): ณ เวลาลิงก์วัตถุนั้นจะถูกตรวจสอบกับ API ผ่านไฟล์ส่วนหัว (.h) ที่เกี่ยวข้อง ห้องสมุดไม่ได้ใช้จริงจนกว่ารันไทม์ซึ่งเป็นที่ต้องการ ข้อได้เปรียบที่ชัดเจนของสแตติกไลบรารีคือพวกเขาอนุญาตให้แอปพลิเคชันทั้งหมดอยู่ในตัวเองในขณะที่ประโยชน์ของไลบรารีแบบไดนามิกคือสามารถแทนที่ไฟล์ ".so" (เช่น: ในกรณีที่จำเป็นต้องอัปเดตเนื่องจากความปลอดภัย บั๊ก) โดยไม่ต้องการให้แอปพลิเคชันพื้นฐานทำการคอมไพล์ใหม่ ฉันเคยได้ยินบางคนสร้างความแตกต่างระหว่างวัตถุที่ใช้ร่วมกันและไลบรารีที่เชื่อมโยงแบบไดนามิก (DLL's) แม้ว่าพวกเขาจะเป็นทั้งไฟล์ ".so" ก็ตาม มีความแตกต่างระหว่างวัตถุที่ใช้ร่วมกันและ DLLs เมื่อมันมาถึงการพัฒนา C / C ++ บน Linux หรือระบบปฏิบัติการที่สอดคล้องกับ POSIX อื่น ๆ (เช่น: MINIX, UNIX, QNX, ฯลฯ …
272 c++  c  linux  dll  linker 

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