Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无输出的变换_C++_Loops_Vector_Transform_Stl Algorithm - Fatal编程技术网

C++ 无输出的变换

C++ 无输出的变换,c++,loops,vector,transform,stl-algorithm,C++,Loops,Vector,Transform,Stl Algorithm,我有两个大小相同的向量。我需要用另一个向量的内容修改一个向量的每个元素。是否有一种标准算法可以在不返回原始向量的情况下实现这一点 假设我想通过向量条的对应元素修改向量foo的所有元素。我可以使用transform: 但是把任务交给foo是不必要的。或者,我可以编写自己的函数: auto a = foo.begin(); auto b = bar.begin(); while(a != foo.end()){ (a++)->func(*(b++)); } 但是,如果已经有了一些东

我有两个大小相同的向量。我需要用另一个向量的内容修改一个向量的每个元素。是否有一种标准算法可以在不返回原始向量的情况下实现这一点

假设我想通过向量条的对应元素修改向量foo的所有元素。我可以使用transform:

但是把任务交给foo是不必要的。或者,我可以编写自己的函数:

auto a = foo.begin();
auto b = bar.begin();

while(a != foo.end()){
    (a++)->func(*(b++));
}

但是,如果已经有了一些东西,我宁愿不要重新发明轮子。

你要求的基本上是二进制函数的一个。 由于还没有这样的事情,您可以执行以下操作之一:

1为二进制函数的每一个实现这样一个for_的通用版本:

代码取自


你所要求的基本上是一个二进制函数。 由于还没有这样的事情,您可以执行以下操作之一:

1为二进制函数的每一个实现这样一个for_的通用版本:

代码取自


对此最清晰的答案似乎是使用索引而不是迭代器

for(auto i = 0; i < foo.size(); ++i) foo[i].func(bar[i]);

对此最清晰的答案似乎是使用索引而不是迭代器

for(auto i = 0; i < foo.size(); ++i) foo[i].func(bar[i]);

小型实用程序功能模板:

template <typename Input1, typename Input2, typename BinaryOperation>
void zip(Input1 b1, Input1 e1, Input2 b2, BinaryOperation binOp) {
    while (b1 != e1) binOp(*b1++, *b2++);
}

小型实用程序功能模板:

template <typename Input1, typename Input2, typename BinaryOperation>
void zip(Input1 b1, Input1 e1, Input2 b2, BinaryOperation binOp) {
    while (b1 != e1) binOp(*b1++, *b2++);
}

您是不想存储操作的结果,还是想将其存储在其他向量中?@blasko我不想存储结果。我想要一个没有输出迭代器且忽略lambda返回的转换函数。您不想存储操作结果,还是想将其存储在其他向量中?@blasko我不想存储结果。我想要一个没有输出迭代器且不考虑lambda返回的转换函数。你说还没有这样的事情,我应该对即将到来的事情抱有希望吗?@JonathanMee链接的std提案是从2013年开始的,我认为这不会在任何时候出现。我最终花时间阅读了整个线程。看起来它从来没有比有人在论坛上发表评论更进一步,这将是一个很好的论坛。正如线程中提到的,boost::zip_迭代器在不久的将来也不会在标准中占有一席之地。当我想到vectors时,似乎没有什么动机将任何东西放在标准中:你说还没有这样的东西,我是否应该对即将出现的东西抱有希望?@JonathanMee链接的std提案是从2013年开始的,我不认为这会在任何时候出现,因为我终于花时间通读了整条线索。看起来它从来没有比有人在论坛上发表评论更进一步,这将是一个很好的论坛。正如线程中提到的,boost::zip_迭代器在不久的将来也不会在标准中占有一席之地。当我想到向量时,似乎很少有动机将任何东西放在标准中:
for(auto i = 0; i < foo.size(); ++i) foo[i].func(bar[i], baz[i], buz[i]);
template <typename Input1, typename Input2, typename BinaryOperation>
void zip(Input1 b1, Input1 e1, Input2 b2, BinaryOperation binOp) {
    while (b1 != e1) binOp(*b1++, *b2++);
}
zip(begin(foo), end(foo), begin(bar), [](auto& a, const auto& b){ a.func(b); });