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

C++ std::vector 核心操作:size()、clear()、empty() 完整用法與實戰範例

     編輯:關於C語言

一、 三大核心成員函式

函式功能回傳時間複雜度備註
size()取得目前元素個數size_type (無號整數)O(1)不等於 capacity()
clear()移除所有元素,大小歸零voidO(N) (呼叫解構函式)不釋放記憶體容量 (capacity() 不變)
empty()判斷是否為空bool (true=空)O(1)優於 size()==0 (語意更清晰)

二、 完整可編譯範例

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    vector v;
    for (int i = 0; i < 10; ++i) v.push_back(i); // 0~9

    cout << "初始內容: ";
    for (auto it = v.begin(); it != v.end(); ++it) cout << *it << ' ';
    cout << '\n';

    cout << "size() = " << v.size() << '\n';      // 10
    cout << "empty() = " << v.empty() << '\n';    // 0 (false)

    v.clear(); // 清空

    cout << "clear() 後:\n";
    cout << "size() = " << v.size() << '\n';      // 0
    cout << "empty() = " << v.empty() << '\n';    // 1 (true)
    cout << "capacity() = " << v.capacity() << '\n'; // 仍保留記憶體 (通常 10 或更多)

    // 真正釋放記憶體 (C++11)
    v.shrink_to_fit();
    cout << "shrink_to_fit() 後 capacity = " << v.capacity() << '\n'; // 0

    system("pause");
    return 0;
}

三、 進階補充

  1. size() vs capacity():size() 為有效元素數;capacity() 為已分配可容納元素數 (不重新分配)。reserve(n) 預留容量避免擴容拷貝。
  2. clear() 後迭代器、指標、引用 全部失效。
  3. empty() 是唯一標準判空方式,勿用 v.size() == 0 或 !v.size() (雖能編譯但語意較差)。
  4. C++20 std::erase_if(v, pred) 可條件清除。
  5. 自訂類型元素需確保解構函式正確釋放資源 (RAII)。

四、 實戰模式:安全遍歷與清空

// 邊遍歷邊刪除 (需用 erase 回傳的新迭代器)
for (auto it = v.begin(); it != v.end(); ) {
    if (ShouldRemove(*it)) it = v.erase(it);
    else ++it;
}

// 批次清空並釋放記憶體
vector v;
v.clear();
v.shrink_to_fit(); // C++11, 非強制釋放,視實現而定

// 交換技巧 (C++98/03 釋放記憶體)
vector().swap(v); // v 變空且 capacity 歸零

總結

size() 看大小,empty() 判空,clear() 清內容保容量。搭配 capacity()/reserve()/shrink_to_fit() 掌握記憶體節奏,配合 erase 迭代器慣用法,驕馭 vector 這把 C++ 容器瑞士刀。

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