首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 動態數組擴容:拒絕手動 memcpy,拥抱 std::vector

     編輯:程式設計疑難解答

C++ 6.0 時代常用 memcpy 手動擴容數組,既繁瑣又易出錯。現代 C++ 標準庫 std::vector 提供自動擴容、內存管理、隨機訪問,效率與手寫代碼持平甚至更優(受益於移動語義、小對象優化)。

為何不推薦手動擴容

  • 需自行管理容量、大小、內存拷貝、異常安全
  • memcpy 僅適用於 POD 類型,含構造/析構函數的對象會導致未定義行為
  • 代碼冗長,維護成本高

vector 使用示例

#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec;
    int x;
    while (std::cin >> x) {
        vec.push_back(x); // 自動擴容,均攤 O(1)
    }
    for (int v : vec) std::cout << v << ' ';
    return 0;
}

性能對比

  • push_back 均攤常數時間,擴容策略通常為 2倍(實現相關)
  • 可預先 reserve(n) 減少重分配
  • C++11 移動語義使擴容時對象轉移零開銷

結論

除非嵌入式極度受限環境無法使用 STL,**永遠優先選擇 std::vector**。這是現代 C++ 核心準則(C++ Core Guidelines)強烈推薦的做法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved