如何以简单的方式清除内容?
如果仅使用vec_vec.clear();
, vector 中仍有一些未清除的内容。
#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++编译器,库等的错误。因此,它的行为可能像一个空 vector ,可能会使程序崩溃,可能会打印一些值,否则它可能会达到您今天的期望,然后在最糟糕的时间休息。
另请参见this Q&A有关未定义,未指定和实现定义的行为。
关于c++ - 如何实际上在C++中 “clear”一个 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63970157/