Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化表_C++_Arrays_Multidimensional Array_Literals_Array Initialization - Fatal编程技术网

C++ 初始化表

C++ 初始化表,c++,arrays,multidimensional-array,literals,array-initialization,C++,Arrays,Multidimensional Array,Literals,Array Initialization,这是我目前的计划: #include <iostream> #include <windows.h> using namespace std; int colonne; int ligne; void initDamier (int damier[ligne][colonne]) { for (int i = 0; i < ligne; ++i) for (int j = 0; i < colonne; ++j)

这是我目前的计划:

#include <iostream>
#include <windows.h>
using namespace std;
int colonne;
int ligne;

void initDamier (int damier[ligne][colonne])
{
    for (int i = 0; i < ligne; ++i)
        for (int j = 0; i < colonne; ++j)
            damier[i][j]=0; //0=case vide
}

void afficheDamier (int damier[ligne][colonne])
{
    for (int i = 0; i < ligne; ++i)
    {
        cout<<endl;
        for (int j = 0; j < colonne; ++j)
        {
            cout<<damier[i][j]<<"|";
        }
    }
}

int main()
{
    int a,b;
    cout<<"Entrez le nombre de ligne du damier:"<<endl;
    cin>>a;
    ligne=a;
    cout<<"Entrez le nombre de colonne du damier:"<<endl;
    cin>>b;
    colonne=b;
    int damier[ligne][colonne];
    initDamier(damier);
    afficheDamier(damier);
    return 0;
}
#包括
#包括
使用名称空间std;
内科隆;
林内;
void initDamier(int-damier[ligne][colonne])
{
对于(int i=0;i听tobi303的建议:使用
std::vector

#include <vector>
#include <iostream>

void afficheDamier (std::vector<std::vector<int> > const & damier) 
 {
   std::vector<std::vector<int> >::const_iterator  cil;
   std::vector<int>::const_iterator               cic;

   for ( cil = damier.begin() ; cil != damier.end() ; ++cil )
    {
      std::cout << std::endl;

      for ( cic = cil->begin() ; cic != cil->end() ; ++cic )
         std::cout << (*cic) << '|';
    }

   std::cout << std::endl;
 }

int main()
 {
   int ligne, colonne;

   std::cout << "Entrez le nombre de ligne du damier:" << std::endl;
   std::cin >> ligne;
   std::cout << "Entrez le nombre de colonne du damier:" << std::endl;
   std::cin >> colonne;

   std::vector<std::vector<int> > damier(ligne, std::vector<int>(colonne, 0));

   afficheDamier(damier);

   return 0; 
 }

你所说的是动态内存分配。如C++中,你可能想用A来处理它。

因此,整个代码的第一部分可以替换为:

size_t a, b;
cout << "Entrez le nombre de ligne du damier:" << endl;
cin >> a;
cout << "Entrez le nombre de colonne du damier:" << endl;
cin >> b;
vector<vector<int>> damier(a, vector<int>(b, 0));
afficheDamier(damier);


请注意:我在这里建议使用
vector
,这可能是让玩具示例工作的最简单方法,但在生产代码中,避开
vector
vector
将是可取的:

如果您想使用数组而不是
std::vector
,可以使用通过引用创建数组:

template<size_t ligne, size_t colonne>
void initDamier (int (&damier)[ligne][colonne])
{
    for (int i = 0; i < ligne; ++i)
        for (int j = 0; j < colonne; ++j) // Note that you had a nasty typo in this line
            damier[i][j]=0;
}
模板
void initDamier(int(&damier)[ligne][colonne])
{
对于(int i=0;i
甚至

template<size_t ligne, size_t colonne>
void initDamier (int (&damier)[ligne][colonne])
{
    for (auto& x: damier)
        for (auto& y: x)
            y = 0;
}
模板
void initDamier(int(&damier)[ligne][colonne])
{
用于(自动和x:damier)
用于(自动和y:x)
y=0;
}

另一种解决方案可能是:

#include <iostream>
using namespace std;

int colonne;

int ligne;

void initDamier (int **damier, int ligne, int colonne)
{
    for (int i = 0; i < ligne; ++i){
        for (int j = 0; j < colonne; ++j){
            damier[i][j]=0; //0=case vide
        }
    }
}
#包括
使用名称空间std;
内科隆;
林内;
无效初始值(内部**damier,内部ligne,内部colonne)
{
对于(int i=0;i
-

void afficheDamier(内部**damier,内部ligne,内部colonne)
{
对于(int i=0;icoutPossible duplicate:使用
std::vector
或更合适的方法,而不是使用裸c样式arrays@NathanOliver你的链接指向某个模板问题…@tobi303 Oops。我使用了错误的链接。修复了。可能的重复:当
向量
已经为我们处理了所有这些问题时,为什么要手动分配并泄漏内存?是的,你是是的,你必须手动处理内存,这就是为什么我发布了“可能的解决方案”因为您从
main
返回时没有删除内存,实际上是在鼓励内存泄漏。这种破坏性的副作用远远超过了您的解决方案可能带来的任何优点。请包括删除,删除您的答案,或者按照@underline\d的建议,使用
vector
。遗憾的是,您的删除仍然是错误的。
delete damier[i]
应该是
delete[]damier[i]
。这个答案的最终问题是,即使您再次编辑它以正确地执行删除操作,它仍然是比使用
向量
更糟糕的解决方案:(我们不是想提出一系列不同的方法来实现这一点,我们只是想找到一个最好的方法来实现这一点。好吧,如果已经提出了好的解决方案,那么我们就不需要再添加其他答案了!没有必要纯粹为了发布而发布其他内容。好吧,是的,但是你不能选择runt的维度操作中的ime。(另外,
std::array
可能更容易使用。)
template<size_t ligne, size_t colonne>
void initDamier (int (&damier)[ligne][colonne])
{
    for (auto& x: damier)
        for (auto& y: x)
            y = 0;
}
#include <iostream>
using namespace std;

int colonne;

int ligne;

void initDamier (int **damier, int ligne, int colonne)
{
    for (int i = 0; i < ligne; ++i){
        for (int j = 0; j < colonne; ++j){
            damier[i][j]=0; //0=case vide
        }
    }
}
void afficheDamier (int **damier, int ligne, int colonne)
{
    for (int i = 0; i < ligne; ++i)
       {
        cout<<endl;
        for (int j = 0; j < colonne; ++j)
        {
            cout<<damier[i][j]<<"|";
        }
    }
    cout<<endl;
}
int main()
{
    int a,b;

    cout<<"Entrez le nombre de ligne du damier:"<<endl;
    cin>>a;
    ligne=a;
    cout<<"Entrez le nombre de colonne du damier:"<<endl;
    cin>>b;
    colonne=b;
    int** damier = new int*[colonne];

    for(int i=0;i<colonne;i++)
        damier[i] = new int[ligne];

    initDamier(damier,ligne, colonne);
    afficheDamier(damier, ligne, colonne);

    for(int i=0;i<colonne;i++)
        delete damier[i];

    delete[] damier;

    return 0;
}