C++ 使用cpp中的默认值初始化二维数组

C++ 使用cpp中的默认值初始化二维数组,c++,arrays,C++,Arrays,我想用cpp中的默认值-1创建一个N*N数组,我尝试了很多方法,比如memset,fill,fill\N,但都没有成功 这是我的密码: N = 10; int **m = new int*[N]; for(int i = 0; i < N; ++i) { int a[N]; fill_n(a, N, -1); for(int j = 0; j < N; j++) cout <<

我想用cpp中的默认值
-1
创建一个
N*N
数组,我尝试了很多方法,比如
memset
fill
fill\N
,但都没有成功

这是我的密码:

    N = 10;
    int **m = new int*[N];
    for(int i = 0; i < N; ++i) {
        int a[N];
        fill_n(a, N, -1);
        for(int j = 0; j < N; j++)
            cout << a[j] << endl; // values here are all -1
        m[i] = a;
        // m[i] = new int[N];
    }
    // memset(m, -1, sizeof(m));
    
    for(int i=0; i < N; i++) {
        for(int j = 0; j < N; j++) {
            // value output here are wrong, looks like random numbers
            cout << "[" << i << "][" << j << "]" << m[i][j] << endl; 
        }
    }
相反,当我指定两个for循环时,它可以正常工作

for(int i=0;iCUT< P>既然你把问题标记为C++,那么最好利用标准库;当你需要动态分配的数组时,你通常使用<代码> STD::vector < /Cord>类:

//https://gcc.godbolt.org/z/6n9c1PYvx
#include <iostream>
#include <vector>

int main()
{
    std::size_t N = 2;
    std::vector< std::vector<int> > v(N, std::vector<int>(N,-1) );
    for(std::size_t i=0; i<v.size(); ++i)
       {
        for(std::size_t j=0; j<v[i].size(); ++j)
           {
            std::cout << "v[" << i << "][" << j <<"] = " << v[i][j] << '\n';
           }
       }
}

<代码> int a[n];是不合法的C++代码。然后,你做代码> m [i]=a;<代码> >在代码> > <代码>超出范围,留下<代码> M[i] < /C>悬空。
//https://gcc.godbolt.org/z/6n9c1PYvx
#include <iostream>
#include <vector>

int main()
{
    std::size_t N = 2;
    std::vector< std::vector<int> > v(N, std::vector<int>(N,-1) );
    for(std::size_t i=0; i<v.size(); ++i)
       {
        for(std::size_t j=0; j<v[i].size(); ++j)
           {
            std::cout << "v[" << i << "][" << j <<"] = " << v[i][j] << '\n';
           }
       }
}
int main()
{
    std::size_t N = 2;
    std::vector<int> v(N*N, -1);
    for(std::size_t i=0; i<N; ++i)
       {
        for(std::size_t j=0; j<N; ++j)
           {
            std::cout << "v[" << i << "][" << j <<"] = " << v[i+N*j] << '\n';
           }
       }
}