เริ่มต้นเวกเตอร์เป็นศูนย์ C ++ / C ++ 11


118

ฉันรู้ว่าใน C ++ 11 พวกเขาเพิ่มคุณสมบัติเพื่อเริ่มต้นตัวแปรเป็นศูนย์เช่นนี้

double number = {}; // number = 0
int data{};  // data = 0

มีวิธีที่คล้ายกันในการเริ่มต้นstd::vectorความยาวคงที่เป็นศูนย์ทั้งหมดหรือไม่?


13
std::vector<int> vec(42);
avakar

9
btw นี่ไม่ใช่เรื่องใหม่ใน c ++ 11 คุณสามารถทำได้ในเวอร์ชันก่อนหน้าเช่นกัน
balki

คำตอบ:


221

คุณไม่จำเป็นต้องมีรายการเริ่มต้นสำหรับสิ่งนั้น:

std::vector<int> vector1(length, 0);
std::vector<double> vector2(length, 0.0);

37
คุณไม่จำเป็นต้องระบุอย่างชัดเจนว่าคุณเป็น 0 หรือไม่? เพียงแค่vector(length)ควรจะทำงาน?
Daniel Gratzer

38
@jozefg: ใช่มันใช้งานได้แม้ว่าจะไม่มีอันตรายใด ๆ ในการระบุสิ่งที่คุณต้องการให้โค้ดทำอย่างชัดเจน
ronag

1
@ronag ฉันเขียนคำตอบของตัวเองเพราะความชัดเจนในกรณีนี้ไม่จำเป็นต้องเป็นตัวอย่างที่ดีหาก int ไม่ใช่ประเภทที่เขากำลังทำงานด้วย โปรแกรม gereral มีอยู่ใน c ++ แต่เมื่อฉันได้รับการเตือนว่าคุณสามารถละเว้นอาร์กิวเมนต์ได้ทั้งหมดฉันก็ลบคำตอบของฉัน
Johannes Schaub - litb

1
เวกเตอร์เริ่มต้นเป็น 0 โดยอัตโนมัติเว้นแต่คุณจะระบุค่าอื่นในการประกาศเช่นที่ ronag แสดง
Nikos

เป็นไปได้หรือไม่ที่จะเริ่มต้นองค์ประกอบทั้งหมดของ Global Vector ใหม่ZEROอย่างมีประสิทธิภาพโดยไม่ต้องใช้ลูป ??????
Ankit Mishra

0

การเริ่มต้นเวกเตอร์ที่มีโครงสร้างคลาสหรือสหภาพสามารถทำได้ด้วยวิธีนี้

std::vector<SomeStruct> someStructVect(length);
memset(someStructVect.data(), 0, sizeof(SomeStruct)*length);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.