[英]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])
在此clear
, vec_vec
為空,因此表達式vec_vec[0]
具有未定義的行為。
未定義的行為意味着任何事情都可能發生,這是程序的錯誤,而不是 C++ 編譯器、庫等的錯誤。所以它可能表現得像一個空向量,它可能會使你的程序崩潰,它可能會打印一些值,或者它可能會按照您今天的預期執行,然后在以后最糟糕的時間中斷。
另請參閱有關未定義、未指定和實現定義的行為的問答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.