将一个std::vector分配给一个std::valarray

10

我有一个vector<vector<double>,也就是一个值的表格(矩阵)。每一列代表行星的位置和速度,而每一行存储同一个行星的数据。我想把一行转换成valarray,因为需要进行数学运算。然后我想把这些valarray(行星)存储在一个向量中。我尝试了以下方法:

vector<vector<double>> corps_tmp=configFile.get_corps(); // The function returns a vector<vector<double>>

    valarray<double> corpX;
    for (int i(0); i < corps_tmp.size(); i++) {
        corpX = corps_tmp[i]; // I want to save the first row of the vector<vector<double>> on the valarray
        corps.push_back(corpX); // I want to ''add'' the valarray to a vector.
        corpX = 0;
    }

这段代码无法运行,并且在将一个向量分配给valarray时出现错误(显然不允许)。

有没有简单的方法可以实现我尝试做的事情?


2
你应该使用一个简单的 std::vector<double> 来表示矩阵,并使用一些公式来计算正确的索引。std::vector<std::vector<double>> 会影响缓存。 - Stephan Dollberg
@bamboon 我需要使用valarray创建一个数值算法,可以同时集成位置和速度(即整个valarray)。 - user1434698
1个回答

19

从向量创建valarray的方法:

std::valarray<double> corpX(corps_tmp[i].data(), corps_tmp[i].size());
将数据写回向量中:
corps_tmp[i].assign(std::begin(corpX), std::end(corpX));

我之前不知道std::begin(std::valarray)或者std::end(std::valarray)。特别是,当从向量构造一个std::valarray时,我们有非迭代器参数,而在向std::vector赋值时有类似迭代器的参数 - 在这两种情况下,期望的参数类型与正在构造或分配的对象的类型一致。 - damienh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接