C++ 在网格中的任意位置分布若干个零

C++ 在网格中的任意位置分布若干个零,c++,arrays,vector,C++,Arrays,Vector,我有一个平方向量(网格),我想在其中插入一个零的数字(“conc”)。 然后,洗牌向量以分配零。 (假设栅格向量的大小为10x10) 1) 我试过: int conc=1; for (size_t i=0, max=conc; i!=max;i++){ grid.erase(grid.begin()+1); for (size_t j=0,max=grid.size();j!=max; j++)

我有一个平方向量(网格),我想在其中插入一个零的数字(“conc”)。 然后,洗牌向量以分配零。 (假设栅格向量的大小为10x10)

1) 我试过:

       int conc=1;

        for (size_t i=0, max=conc; i!=max;i++){
                grid.erase(grid.begin()+1);

            for (size_t j=0,max=grid.size();j!=max; j++)
                grid[i][j]=0;
            }


            random_shuffle(grid.begin(),grid.end());
问题是,在上面的例子中,我收到的是10个零(网格大小=10x10),而不是1(现在conc=1,所以我想要1个零)

这十个零都在一行,我想把零的数量分布在网格的任何地方


我想插入1个零(conc)。

您可以使用如下数组:

arr[LINES*COLUMNS] 
而不是

arr[i][j]
访问它作为

arr[i*COLUMNS+j]
使用这种方法,一切都是线性的,假设您希望这种行为用于洗牌

更新

正如Joachim Pileborg所建议的amd。。。阅读更多关于random_shufle…

不返回任何内容的信息

//is this what you intended
int conc=10;
 for (size_t i=0, max=grid.size(); i!=max;i++){
            for (size_t j=0,max=grid.size();j!=max; j++)
                grid[i][j]=conc;//change here
            }
您应该在使用算法后显示矩阵

random_shuffle(&arr[0][0], &arr[0][0] + sizeof(arr)/sizeof(arr[0][0])); 

for(std::size_t i = 0; i < 4; ++i)
{
 for(std::size_t j = 0; j < 2; ++j)
   std::cout << arr[i][j] << " ";
 std::cout << std::endl;
}
random_shuffle(&arr[0][0],&arr[0][0]+sizeof(arr)/sizeof(arr[0][0]);
对于(标准::尺寸\u t i=0;i<4;++i)
{
对于(标准尺寸j=0;j<2;++j)
std::cout
//我不想违反您的约束和
//如果你愿意封装一些东西
//我们可以让编译器处理关于老式数组的大小观察
结构pairx
{
int d[2];
};
int a_测试_200()
{
pairx{4,3};//注意更多大括号..仅用于向人类解释
//也考虑STD::如果你的限制允许向量
pairx arrp[]={{{0,1}}、{{1,0}、{{0,-1}、{-1,0}};

你可能想读一个。
std::random\u shuffle
returnsnothing@JoachimPileborg:我检查过了,但在2d vector中我没有成功:我想用“conc”填充数组零。例如10个零。@George你说的10个零是什么意思?你是说它在矩阵
网格
中的任何位置都必须正好有10个零吗?@George你以前好像用零值填充了整个数组结构。你已经成功了吗?除了零之外,还有其他值是你关心的吗要求?您可能想做一些简单的事情。我们只需要了解您需要什么。@user3003631:我正在创建一个包含1的二维向量。我想在其中插入一些零(conc)。然后,我想洗牌,以便将零分布在向量中。我更新了,请检查。另外,谢谢你的其他答案,但我想按我的方式进行。谢谢。@user3003631:希望你理解我的问题。我想我很接近了。谢谢:嗯,它运行了,但洗牌没有按预期工作。我想从一个向量返回一个元素rr,但它可能返回例如“11”,它在arr中不存在!另外,我的意思是,我想在网格中添加10个零,然后洗牌向量。好的,至于洗牌,错误是使用了arr[0][0],我们必须使用arr[0]。至于我的其他问题,如果你能帮忙的话。我很感激。谢谢向
网格显示十个零,这是一个5x2矩阵吗?重新表述你的问题陈述,看起来你有一个@POW:grid的维度“plex,plex”,其中plex是一个int。我想插入一些零(“conc”)在它里面。我知道如何在一维向量中做,但在二维向量中做不到。然后,在插入一些零之后,我想洗牌。@George,然后使用一个计数器作为
conc
,首先在
grid
conc
位置添加零,直到
--conc!=0
,打破循环,现在洗牌这个
grid
,确保用一些在使用
conc
0填充之前,请使用其他数字,否则它将有垃圾values@George这种封装的方法可能会保留您对数据的概念…在这里写为pairx。这是在参考您下面关于洗牌超过您预期的评论。
//I do not want to violate your constraints and
//if you are willing to encapsulate something
//we can let the compiler deal with size observations about an old fashioned array
struct pairx
{
    int d[2];
};

int a_test_200()
{
pairx x{{4,3}};//notice more braces ..used only for explanation to human
//also consider std::vector if your constraints permit
pairx arrp[]={  { {0,1}},{  {1,0}}, { {0,-1}}, { {-1,0} } };
cout << "original" << endl;
for (const auto & e : arrp) cout << e.d[0] << " " <<  e.d[1] << ", ";
cout << endl;
//we assume you shuffle opaque structure pairx
random_shuffle(begin(arrp), end(arrp));
cout << "shuffle" << endl;
for (const auto & e : arrp) cout << e.d[0] << " " <<  e.d[1] << ", ";
cout << endl;
return 0;
}