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;i coutPossible 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;
}