Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.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++_Vector_Iterator_Stdvector - Fatal编程技术网

C++ 使用随机值初始化二维向量

C++ 使用随机值初始化二维向量,c++,vector,iterator,stdvector,C++,Vector,Iterator,Stdvector,我正试图用随机数初始化一个双向量数组(实际上是一个矩阵),但我肯定是出了什么问题,我在这里或谷歌上都找不到解决方案 我有下一个“标准”定义,它用0初始化我的矩阵: 案例1: 现在在这个循环中,我找不到一条一条地给它们分配新值的方法。我很抱歉,因为我很有良心,这是一个非常简单的问题,但在谷歌上找不到 由于it2是我必须使用的变量,如果我尝试使用上面的下一个变量,它将无法编译,甚至intellisense也不允许我使用de‘assign’(因为我错了ofc): 我假设assign是我在这种情况下需要

我正试图用随机数初始化一个双向量数组(实际上是一个矩阵),但我肯定是出了什么问题,我在这里或谷歌上都找不到解决方案

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

案例1:

现在在这个循环中,我找不到一条一条地给它们分配新值的方法。我很抱歉,因为我很有良心,这是一个非常简单的问题,但在谷歌上找不到

由于it2是我必须使用的变量,如果我尝试使用上面的下一个变量,它将无法编译,甚至intellisense也不允许我使用de‘assign’(因为我错了ofc):

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


非常感谢你

我不认为您可以向向量构造函数提供一个随机值,并期望所有元素都具有随机值。而是保留向量大小,然后通过取消引用适当的迭代器来分配随机值:

#include <iostream>
#include <vector>
#include <random>
#include <iomanip>

int main() {
    std::random_device rd; 
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 100);
    std::vector<std::vector<int>> Matrix(5, std::vector<int>(7, 0));

    for (auto it1 = Matrix.begin(); it1 != Matrix.end(); it1++) {
        for (auto it2 = it1->begin(); it2 != it1->end(); it2++) {
            *it2 = dis(gen); // dereference iterator, set the value
            std::cout << std::setw(4) << *it2;
        }
        std::cout << '\n';
    }
}
#包括
#包括
#包括
#包括
int main(){
std::随机_装置rd;
标准:mt19937 gen(rd());
标准:均匀分布分布图(1100);
std::向量矩阵(5,std::向量(7,0));
对于(自动it1=Matrix.begin();it1!=Matrix.end();it1++){
对于(自动it2=it1->begin();it2!=it1->end();it2++){
*it2=dis(gen);//取消引用迭代器,设置值

std::cout迭代器就像指针。最简单的方法就是在循环中分配
*it2=rand()%100

更复杂的一点是使用
中的函数为每个元素指定调用其函数参数的结果


用每个元素调用它的函数参数

如果我答对了你的问题,你正在寻找一种生成随机矩阵的方法(其中每个元素都是随机的)。
以下是如何做到这一点:

int num_rows = 5, num_cols = 7;
// create Matrix filled with 0 (as you mentioned in Case1)
std::vector<std::vector<int>> Matrix(num_rows, std::vector<int>(num_cols, 0));
// Iterating over each row
for (auto it_row = Matrix.begin(); it_row != Matrix.end(); it_row++)
{
    // Getting each (i,j) element and assigning random value to it
    for (auto it_col = it_row->begin(); it_col != it_row->end(); it_col++)
    {
        *it_col = rand() % 100;
    }
}

// let's print the Matrix
for (auto it_row = Matrix.begin(); it_row != Matrix.end(); it_row++)
{
    for (auto it_col = it_row->begin(); it_col != it_row->end(); it_col++)
    {
        std::cout << *it_col << " ";
    }

    std::cout << std::endl;
}
int num_rows=5,num_cols=7;
//创建填充0的矩阵(如案例1中所述)
std::向量矩阵(num_行,std::向量(num_列,0));
//迭代每行
对于(自动it_行=矩阵。开始();it_行!=矩阵。结束();it_行++)
{
//获取每个(i,j)元素并为其分配随机值
对于(自动it列=it列->开始();it列!=it列->结束();it列++)
{
*it_col=rand()%100;
}
}
//让我们打印矩阵
对于(自动it_行=矩阵。开始();it_行!=矩阵。结束();it_行++)
{
对于(自动it列=it列->开始();it列!=it列->结束();it列++)
{

std::cout看起来像是最好的+1Oh..我明白了!我理解迭代器中的like指针,但不知道我可以用最简单的方法赋值,比如
=
hehe Ty这么多!!我知道没有双循环就没有更好的方法了,对吧?我提供了
fill\u matrix
,作为一个函数,它可以e同样的事情,没有明确的解释looping@Caleth好的!让我来问你最后一个问题…你为什么要传递
[](){return rand()%100;}
?我不明白它是做什么的,而且为什么这个“参数”以
[]()
empty开头。它定义了一个匿名函数对象,可以像
int(void)一样调用它
function谢谢!为什么要使用两次双循环?:P一个问题..为什么在这里使用自动?使用std或auto哪个更好?以前从未使用过auto(我知道是什么)但永远不知道使用它是否好…@Megasa3 double loop第二次用于打印结果矩阵,ofc您不需要在代码中使用它。
auto
用于使代码更可读和方便哇,我必须在谷歌上查看random_设备、mt19937和uniform,因为我从来没有读过它!太多了!!
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.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;
#include <iostream>
#include <vector>
#include <random>
#include <iomanip>

int main() {
    std::random_device rd; 
    std::mt19937 gen(rd());
    std::uniform_int_distribution<> dis(1, 100);
    std::vector<std::vector<int>> Matrix(5, std::vector<int>(7, 0));

    for (auto it1 = Matrix.begin(); it1 != Matrix.end(); it1++) {
        for (auto it2 = it1->begin(); it2 != it1->end(); it2++) {
            *it2 = dis(gen); // dereference iterator, set the value
            std::cout << std::setw(4) << *it2;
        }
        std::cout << '\n';
    }
}
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);
}
int num_rows = 5, num_cols = 7;
// create Matrix filled with 0 (as you mentioned in Case1)
std::vector<std::vector<int>> Matrix(num_rows, std::vector<int>(num_cols, 0));
// Iterating over each row
for (auto it_row = Matrix.begin(); it_row != Matrix.end(); it_row++)
{
    // Getting each (i,j) element and assigning random value to it
    for (auto it_col = it_row->begin(); it_col != it_row->end(); it_col++)
    {
        *it_col = rand() % 100;
    }
}

// let's print the Matrix
for (auto it_row = Matrix.begin(); it_row != Matrix.end(); it_row++)
{
    for (auto it_col = it_row->begin(); it_col != it_row->end(); it_col++)
    {
        std::cout << *it_col << " ";
    }

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