为什么不工作vector.clear()

0 c++

需要帮助..请告诉我为什么"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;
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 8

A.clear()确实清除了数组,结果是A包含零元素.这与将每个元素设置为零不同.

您的代码具有未定义的行为,因为后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';
}
Run Code Online (Sandbox Code Playgroud)


jan*_*anm 5

您正在调用未定义的行为.A.clear()工作正常,但你正在读你不应该的记忆.尝试使用"<A.size()"而不是"<= N"