gpt4 book ai didi

c++ - 如何使用算法来填充 vector 的 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:06 26 4
gpt4 key购买 nike

我有

typedef std::vector<int> IVec;
typedef std::vector<IVec> IMat;

我想知道如何使用标准算法填充IMat,即如何用更少的代码执行以下操作(所有IVec 都有大小相同)?

void fill(IMat& mat){
for (int i=0;i<mat.size();i++){
for (int j=0;j<mat[i].size();j++){
mat[i][j] = i*j;
}
}
}

PS:已经有一种用常数填充矩阵的方法可以帮助我。最好使用 C++11 之前的算法。

最佳答案

最佳解决方案是您已经实现的解决方案。它利用 i/j 作为偏移量和输入来计算算法。

标准算法必须为元素维护计数器使用迭代器。这种数据镜像是问题的明确标志。但它可以完成,如果你想花哨的话,甚至可以在一行上完成:

for_each(mat.begin(), mat.end(), [&](auto& i) { static auto row = 0; auto column = 0; generate(i.begin(), i.end(), [&]() { return row * column++; }); ++row; });

但如前所述,仅仅因为它可以完成并不意味着它应该完成。解决此问题的最佳方法是 for 循环。如果您喜欢,甚至可以在一行中完成:

for(auto i = 0U;i < mat.size();i++) for(auto j = 0U;j < mat[i].size();j++) mat[i][j] = i*j;

顺便说一句,我的标准算法在 Clang 3.7.0 上运行良好, gcc 5.1 , 以及 Visual Studio 2015。然而 previously I used transform rather than generate .而且似乎有一些implementation bugs in gcc 5.1 and Visual Studio 2015捕获 lambda 作用域 static 变量。

关于c++ - 如何使用算法来填充 vector 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33280217/

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