C++ 使用cpp中的默认值初始化二维数组
我想用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 <<
-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;i CUT< 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';
}
}
}