正在初始化 Table
Initializing a Table
到目前为止,这是我的程序:
#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;
}
我明白为什么它不起作用。在 damier[*][*]
中,*
必须是 const
或固定数字。谁能告诉我如何解决这个问题?
听听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++11 编译器,afficheDamier()
可以简化如下(根据 Jonathan Mee 的建议)
void afficheDamier (std::vector<std::vector<int>> const & damier)
{
for ( auto const & l : damier )
{
std::cout << std::endl;
for ( auto const & c : l )
std::cout << c << '|';
}
std::cout << std::endl;
}
你说的是动态内存分配。作为 , in C++ you'll probably want to use a vector
来处理。
因此您的代码的整个第一部分可以替换为:
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
你还需要修改 afficheDamier
:
void afficheDamier(vector<vector<int>> damier) {
for(auto& i : damier){
cout << endl;
for(auto& j : i) {
cout << j << '|';
}
}
}
请注意:我在这里建议了 vector<vector<int>>
,这可能是让玩具示例正常工作的最简单方法,但在生产代码中,回避 vector
的 vector
s 是可取的:
如果您想使用数组而不是 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;
}
甚至
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;
}
到目前为止,这是我的程序:
#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;
}
我明白为什么它不起作用。在 damier[*][*]
中,*
必须是 const
或固定数字。谁能告诉我如何解决这个问题?
听听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++11 编译器,afficheDamier()
可以简化如下(根据 Jonathan Mee 的建议)
void afficheDamier (std::vector<std::vector<int>> const & damier)
{
for ( auto const & l : damier )
{
std::cout << std::endl;
for ( auto const & c : l )
std::cout << c << '|';
}
std::cout << std::endl;
}
你说的是动态内存分配。作为 vector
来处理。
因此您的代码的整个第一部分可以替换为:
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
你还需要修改 afficheDamier
:
void afficheDamier(vector<vector<int>> damier) {
for(auto& i : damier){
cout << endl;
for(auto& j : i) {
cout << j << '|';
}
}
}
请注意:我在这里建议了 vector<vector<int>>
,这可能是让玩具示例正常工作的最简单方法,但在生产代码中,回避 vector
的 vector
s 是可取的:
如果您想使用数组而不是 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;
}
甚至
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;
}