ฉันรู้ว่าat()
มันช้ากว่า[]
เนื่องจากการตรวจสอบขอบเขตซึ่งจะกล่าวถึงในคำถามที่คล้ายกันเช่นC ++ Vector ที่ / [] ความเร็วของตัวดำเนินการ หรือ:: std :: vector :: at () vs operator [] << ผลลัพธ์ที่น่าประหลาดใจ !! ช้าลง 5 ถึง 10 เท่า / เร็วขึ้น! . ฉันไม่เข้าใจว่าat()
วิธีนี้ดีสำหรับอะไร
ถ้าฉันมีเวกเตอร์ธรรมดา ๆ แบบนี้: std::vector<int> v(10);
และฉันตัดสินใจที่จะเข้าถึงองค์ประกอบของมันโดยใช้at()
แทน[]
ในสถานการณ์เมื่อฉันมีดัชนีi
และฉันไม่แน่ใจว่ามันอยู่ในขอบเขตเวกเตอร์หรือไม่มันบังคับให้ฉันรวมมันด้วยการลองจับ บล็อก :
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
แม้ว่าฉันจะสามารถรับพฤติกรรมเดียวกันได้โดยใช้size()
และตรวจสอบดัชนีด้วยตัวเองซึ่งดูเหมือนง่ายและสะดวกมากสำหรับฉัน:
if (i < v.size())
v[i] = 2;
คำถามของฉันคือ
ข้อดีของการใช้vector :: at over vector :: operator []คืออะไร?
เมื่อฉันควรใช้เวกเตอร์ :: ที่มากกว่าเวกเตอร์ :: ขนาด + เวกเตอร์ :: ผู้ประกอบการ [] ?