提问者:小点点

C++向量迭代


我有一个向量int p=[n1,n2,n3]。 什么是最有效的方法来生成另一个向量,与P大小相同,称之为v1=[m1,m2,m3]。 步骤:

  1. 向量<; INT>; P[N],N,含有n0,n1,n2
  2. 对于N中的每个n_i,生成大小为n0,然后n1,n2的正态随机变量向量
  3. 独立取每个新向量的和,sum(n0),sum(n1),sum(n2)
  4. 创建向量v1[m1,m2,m3]。 对于“v1”中的每个i,包含上一步中的随机数的和。
const int N = 10;
vector<int> p;
vector <double> b;

for ( int i =0; i<N ; i++)
        
    {
   
    Poiss  = U.RandomPoisson(Lambda);  // generate N Poissonian Random variables
    
    Normal = U.RandomNormal(4000,7000); // generate N Normal Random variable
    
    p.push_back(Poiss);
    b.push_back(Normal);
    
}
    
// iterate over P and use each element of p call it p[i] as the size of a new random vector with size p[i] call it vec[p[i]].  Take the sum of vec[p[i]] and add to a new vector call it V.   The Final size of V is the same as P 

for ( auto &i : p )
{
            do some stuff...
}

共1个答案

匿名用户

您可能需要以下内容:

vector<vector<int>> vec;
vector<int> v;
v.reserve(p.size());
for (auto &&i : p) {
    vector<int> temp(i);
    for (auto &&j : temp) 
        j = U.RandomNormal(4000, 7000);
    v.push_back(accumulate(temp.begin(), temp.end(), 0));
    vec.push_back(move(temp));
}


代替

for (auto &&j : temp) 
    j = U.RandomNormal(4000, 7000);

您可以直接使用:

std::generate(temp.begin(), temp.end(), [&U] () { return U.RandomNormal(4000, 7000); });


如果不需要vec,即只需要v中的值,则执行如下操作:

vector<int> v;
v.reserve(p.size());
for (auto &&i : p) {
    int sum = 0;
    for (int j = 0; j < i; ++j) 
        sum += U.RandomNormal(4000, 7000);
    v.push_back(sum);
}

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|向量|迭代)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?