簡體   English   中英

如何在 C++ 中實際“清除”一個向量?

[英]How to actually "clear" a vector in C++?

如何以簡單的方式清除內容?

如果我使用vec_vec.clear(); 只是,向量中還有一些東西沒有被清理干凈。

#include <iostream>
#include <vector>

int main()
{
    std::vector<std::vector<int>> vec_vec(10);
    vec_vec[0].push_back(1);
    vec_vec[0].push_back(2);
    vec_vec[0].push_back(3);
    vec_vec[0].push_back(4);

    for (auto i : vec_vec[0])
        std::cout << i << " ";
    std::cout << "." << std::endl;

    vec_vec.clear();
    for (auto i : vec_vec[0])
        std::cout << i << " ";
    std::cout << "." << std::endl;


    vec_vec[0].clear();
    for (auto i : vec_vec[0])
        std::cout << i << " ";
    std::cout << "." << std::endl;

    for (int i=0; i<vec_vec.size(); i++)
        vec_vec.erase(vec_vec.begin() + i);
    for (auto i : vec_vec[0])
        std::cout << i << " ";
    std::cout << "." << std::endl;
    
    return 0;
}
1 2 3 4 *
0 0 3 4 *
*
*
vec_vec.clear(); for (auto i : vec_vec[0])

在此clearvec_vec為空,因此表達式vec_vec[0]具有未定義的行為。

未定義的行為意味着任何事情都可能發生,這是程序的錯誤,而不是 C++ 編譯器、庫等的錯誤。所以它可能表現得像一個空向量,它可能會使你的程序崩潰,它可能會打印一些值,或者它可能會按照您今天的預期執行,然后在以后最糟糕的時間中斷。

另請參閱有關未定義、未指定和實現定義的行為的問答

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM