c++容器| []与 at () 性能与安全大对比

github热门推荐 › c++容器| []与 at () 性能与安全大对比 (第 72 章)
文章工具
C++ 片段需补全 main() 函数才能运行在实训台打开 →
<span leaf=""><span class="code-snippet__comment">// ==============================================</span></span></code><code><span leaf=""><span class="code-snippet__comment">// vector [] 和 at() 全方位对比</span></span></code><code><span leaf=""><span class="code-snippet__comment">// 面试必考 + 工程避坑</span></span></code><code><span leaf=""><span class="code-snippet__comment">// ==============================================</span></span></code><code><span leaf=""><span class="code-snippet__meta">#</span><span class="code-snippet__meta"><span class="code-snippet__keyword">include</span></span><span class="code-snippet__meta"> </span><span class="code-snippet__meta"><span class="code-snippet__string"><iostream></span></span></span></code><code><span leaf=""><span class="code-snippet__meta">#</span><span class="code-snippet__meta"><span class="code-snippet__keyword">include</span></span><span class="code-snippet__meta"> </span><span class="code-snippet__meta"><span class="code-snippet__string"><vector></span></span></span></code><code><span leaf=""><span class="code-snippet__keyword">using</span> <span class="code-snippet__keyword">namespace</span> std;</span></code><code><span leaf=""><span class="code-snippet__function"><span class="code-snippet__type">int</span></span><span class="code-snippet__function"> </span><span class="code-snippet__function"><span class="code-snippet__title">main</span></span><span class="code-snippet__function"><span class="code-snippet__params">()</span></span><span class="code-snippet__function"> </span>{</span></code><code><span leaf="">    vector<<span class="code-snippet__type">int</span>> v = {<span class="code-snippet__number">10</span>, <span class="code-snippet__number">20</span>, <span class="code-snippet__number">30</span>};</span></code><code><span leaf="">    <span class="code-snippet__comment">// ==================== 1. operator[] 无越界检查 ====================</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 特点:</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 1. 不检查下标是否合法</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 2. 越界 → 未定义行为(崩溃/乱码/死机)</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 3. 速度极快(无开销)</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 4. 可读可写</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 5. 不抛异常</span></span></code><code><span leaf="">    cout << v[<span class="code-snippet__number">0</span>] << endl;    <span class="code-snippet__comment">// 正常</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// cout << v[100];      // 越界:直接崩溃/乱码,无任何提示</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// ==================== 2. at() 有越界检查 ====================</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 特点:</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 1. 强制检查下标合法性</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 2. 越界 → 抛出 out_of_range 异常</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 3. 速度稍慢(有检查开销)</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 4. 可读可写</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// 5. 安全、稳定</span></span></code><code><span leaf="">    cout << v.<span class="code-snippet__built_in">at</span>(<span class="code-snippet__number">0</span>) << endl; <span class="code-snippet__comment">// 正常</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// v.at(100);           // 越界:抛出异常,可捕获</span></span></code><code><span leaf="">    <span class="code-snippet__comment">// ==================== 3. 异常捕获演示 ====================</span></span></code><code><span leaf="">    <span class="code-snippet__keyword">try</span> {</span></code><code><span leaf="">        v.<span class="code-snippet__built_in">at</span>(<span class="code-snippet__number">999</span>);</span></code><code><span leaf="">    } <span class="code-snippet__built_in">catch</span> (<span class="code-snippet__type">const</span> out_of_range& e) {</span></code><code><span leaf="">        cout << <span class="code-snippet__string">"at() 越界异常:"</span> << e.<span class="code-snippet__built_in">what</span>() << endl;</span></code><code><span leaf="">    }</span></code><code><span leaf="">    <span class="code-snippet__keyword">return</span> <span class="code-snippet__number">0</span>;</span></code><code><span leaf="">}</span></code><code><span leaf=""><span class="code-snippet__comment">// ==================== 核心总结(面试必背) ====================</span></span></code><code><span leaf=""><span class="code-snippet__comment">// 1. []   :无检查、超快、不安全、越界崩溃、不抛异常</span></span></code><code><span leaf=""><span class="code-snippet__comment">// 2. at() :有检查、稍慢、安全、越界抛异常、稳定</span></span></code><code><span leaf=""><span class="code-snippet__comment">// 3. 性能 :[] > at()</span></span></code><code><span leaf=""><span class="code-snippet__comment">// 4. 安全 :at() > []</span></span></code><code><span leaf=""><span class="code-snippet__comment">// 5. 工程:高频循环用[],外部输入用at()</span></span>



⚠️ 版权声明

本文为免费文章,欢迎转载。转载请注明出处:一木科技(https://www.pingquan.vip/2026/05/31/c%e5%ae%b9%e5%99%a8-%e4%b8%8e-at-%e6%80%a7%e8%83%bd%e4%b8%8e%e5%ae%89%e5%85%a8%e5%a4%a7%e5%af%b9%e6%af%94/),并保留原文链接。