首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 編程技巧:vector 高效拼接與常用 STL 技巧

     編輯:關於C++

vector 拼接最佳實踐

利用 `insert` 迭代器版本:

vector combine(const vector& a, const vector& b) {
    vector res = a;           // 拷貝 a
    res.insert(res.end(), b.begin(), b.end()); // 追加 b
    return res;
}

原理:`insert(pos, first, last)` 在 `pos` 前插入 `[first,last)` 範圍元素。`res.end()` 即尾部插入。

其他常用技巧

1. 保留容量避免重分配

vector v; v.reserve(100000); // 預分配,push_back 不再擴容

2. 交換釋放內存

vector().swap(v); // C++11 前釋放內存唯一方法
// C++11: v.clear(); v.shrink_to_fit();

3. 刪除元素保持順序 vs 不保持順序

// 保持順序 O(n)
v.erase(remove(v.begin(), v.end(), val), v.end());
// 不保持順序 O(1)
auto it = find(v.begin(), v.end(), val);
if (it != v.end()) { *it = v.back(); v.pop_back(); }

4. 陣列轉 vector 零拷貝

int arr[] = {1,2,3};
vector v(arr, arr+3); // 構造函數範圍版

5. 遍歷時刪除

for (auto it = v.begin(); it != v.end(); ) {
    if (shouldRemove(*it)) it = v.erase(it);
    else ++it;
}

6. 結構體排序

sort(v.begin(), v.end(), [](const Node& a, const Node& b) {
    return a.key < b.key;
});

性能對比

操作推薦方法避免
拼接insert(end, b.begin, b.end)循環 push_back
清空並釋放swap 慣用語 / shrink_to_fitclear() 後繼續用
查找並刪除find + swap-pop (無序) / erase-remove (有序)循環 erase

現代 C++ (C++20/23) 新特性

  • `std::vector::append_range` (C++23) 直接追加範圍
  • `std::ranges::sort` 等範圍算法
  • `std::erase_if` 容器通用刪除

掌握 STL 容器的高效用法,能顯著提升代碼性能與可讀性,是 C++ 工程師的基本功。

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