gpt4 book ai didi

c++ - 使用随机值初始化二维 vector

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:47 24 4
gpt4 key购买 nike

我正在尝试用随机数初始化一个双 vector 数组(实际上是一个矩阵),但我一定是哪里出错了,我在这里或在谷歌中都找不到解决方案。

我有下一个“标准”定义,它用 0 初始化我的矩阵:

案例 1:

 int num_rows=5, num_cols=7;
std::vector<std::vector<int>> Matrix(num_rows, std::vector<int>(num_cols, 0));

所以如果我做这样的事情:

案例 2

      std::vector<std::vector<int>> Matrix(num_rows, std::vector<int>(num_cols, rand()%100));

我看到 rand()%100 被调用了一次,所以如果它返回 34 那么我的所有 Matrix 都将填充该数字。

那时我已经尝试使用案例 1 初始化和带有迭代器的 double for:

for ( std::vector<std::vector<int>>::iterator it1 = Matrix.begin(); it1 != Matrix.end(); ++it1 )
{
for ( std::vector<int>::iterator it2 = (*it1).begin(); it2 != (*it1).end(); ++ it2 )
{
std::cout << (*it2) << "\n"; //With that I can see every value on the matrix... right now all 0

}
}

现在在那个循环中,我找不到逐项进行并为它们分配新值的方法。很抱歉,我是有良心的,这是一个非常简单的问题,但无法在谷歌上找到它......

因为 it2 是我必须使用的 var,如果我尝试制作类似上面的下一个内容,它不会编译,甚至 intellisense 也不会让我取消“分配”(因为我是错误的) :

it2.assign(...) 
(*it2).assign(...)
it1->assign // Here intellisense works but i don't think this it my option.
//
Matrix(it2,rand()%100); // error

Matrix[it1][it2] = rand() % 100; // Desperate...like normal array?
Matrix.at(it2) = rand()%100;
Matrix.at(it1).at(it2) = rand() % 100;

我假设 assign 是我在这种情况下需要的函数,因为插入将添加新元素或者可能是 at 但我尝试的一切都给我一个错误,我没有不知道我还能尝试什么,或者我是否必须以不同的方式考虑它......

非常感谢!

最佳答案

迭代器就像指针。最简单的事情就是分配 *it2 = rand() % 100在你的循环中。

稍微复杂一点的是使用 <algorithm> 中的函数

void fill_row(std::vector<int> & row)
{
std::generate(row.begin(), row.end(), [](){ return rand() % 100; });
}

void fill_matrix(std::vector<std::vector<int>> & mat)
{
std::for_each(mat.begin(), mat.end(), fill_row);
}

std::generate将调用其函数参数的结果分配给每个元素。

std::for_each用每个元素调用它的函数参数

关于c++ - 使用随机值初始化二维 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48378485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com