我有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);
}

07-26 09:38