双精度表示循环加值
Double for loop adding values
我有 2 个向量,每个向量只有 4 个值。我想遍历它们并一起处理它们,因为两个向量中的值在向量中的这些位置一起出现。
for (std::vector<boost::filesystem::path>::iterator i = volumeVec.begin(); i != volumeVec.end(); ++i) {
for (std::vector<boost::filesystem::path>::iterator j = sliceHeaderVec.begin(); j != sliceHeaderVec.end(); ++j) {
ParseHeader(j->string(), i->string(), sourceDir);
}
}
但是,当我运行ParseHeader
时,它处理的值比我预期的要多得多。我想我需要修复我的 for 循环的排列,但不知道该怎么办
您可能想要类似的东西:
assert(volumeVec.size() == sliceHeaderVec.size());
for (std::size_t i = 0; i != volumeVec.size(); ++i) {
ParseHeader(volumeVec[i].string(), sliceHeaderVec[i].string(), sourceDir);
}
或者使用 range-v3:
for (const auto& p : ranges::view::zip(volumeVec, sliceHeaderVec)) {
ParseHeader(std::get<0>(p).string(), std::get<1>(p).string(), sourceDir);
}
如果我理解正确,您会遇到这样的情况:
v1 = { v11, v12, v13, v14}
v2 = { v21, v22, v23, v24}
并且您需要一个循环,该循环成对处理来自v1
和v2
的元素{v11, v21}, {v12, v22}, {v13, v23}, {v14, v24}
。
在这种情况下,您可以简单地使用索引循环:
for (size_t i = 0; i < v1.size(); ++i)
{
process(v1[i], v2[i]);
}
在此之前,您可能需要检查该v1.size() == v2.size()
以避免出现问题。
如果您想对其运行操作(也称为转换(的两个集合,我的建议是使用 <algorithm>
中的std::transform
。在我看来,用它编写的代码是可读性的:
假设您有vector<int> v1
和vector<int> v2
并想要添加它们,您可以执行以下操作:
std::transform(v1.begin(), v1.end(), v2.begin(), v1.begin(), std::plus<int>());
如果需要,最后一个参数也可以是另一个迭代器或后插入器。
相关文章:
- 如何循环打印顶点结构
- 嵌套在循环中的两个循环的 big-O 表示法
- T(n) 表示嵌套循环
- C 表示循环语法理解
- 双精度表示循环加值
- C 嵌套在Python中的循环表示
- 用于循环,if表示Ardiuno驱动湿度控制的说明
- 如何在没有循环的二进制数字表示中只计算1位
- 如何在指针表示法和数组表示法中循环遍历二维数组
- 使用指针表示法在数组中循环
- 使用大括号(即{})表示单行if或循环的目的是什么?
- C 或 C++ :表示循环变量
- 如何循环浮点数的精确表示
- 2表示循环为1
- C++表示循环菱形仅为负数
- 如何在图的边列表表示中检测循环
- 大写O表示嵌套常量for循环
- for循环需要运行LLONG_MAX次数,但是计数器变量也需要表示有符号的数字.你用什么类型的柜台?
- 最小堆通过二叉树的数组表示;MoveDown函数无限循环
- 如何找到循环下FFT乘法的Big-O表示法