需要帮助..请告诉我为什么“A.clear()”也没有清除第一栏? .................................................. ......
#include <iostream>
#include <vector>
using namespace std;
int N, M;
vector< vector<int> > A;
int main()
{
cin >> N >> M;
A.resize(N + 2);
for (int i = 0; i <= N; ++i)
{
A[i].resize(M + 2);
}
A.clear();
for (int i = 0; i <= N; ++i)
{
for (int j = 0; j <= M; ++j)
{
cout << A[i][j] << ' ';
}
cout << '\n';
}
return 0;
}
答案 0 :(得分:8)
A.clear()
确实清除了数组,结果是A
包含零元素。这与将每个元素设置为零不同。
您的代码具有未定义的行为,因为post A.clear()
循环访问现在为空的向量末尾的元素。事实上,内存仍然可以访问并且仍然包含旧数据。但是,并不能保证这种情况。
如果使用正确的维度进行迭代,则会看到A
为空:
for (int i = 0; i < A.size(); ++i)
{
for (int j = 0; j < A[i].size(); ++j)
{
cout << A[i][j] << ' ';
}
cout << '\n';
}
答案 1 :(得分:5)
您正在调用未定义的行为。 A.clear()
工作正常,但你正在读你不应该的记忆。尝试使用“&lt; A.size()”而不是“&lt; = N”
答案 2 :(得分:2)
clear
删除了向量的所有元素,而不是像所期望的那样将它们全部设置为0。在调用clear之后,向量的大小为0.因此,当您尝试读取A[i][j]
时,您正在访问超出范围的索引,并且可能发生任何事情(您的代码会导致undefined behavior
)。