gpt4 book ai didi

c++ - bind2nd 在 for_each 循环中

转载 作者:行者123 更新时间:2023-11-30 01:44:25 25 4
gpt4 key购买 nike

有些事情我目前无法理解。我期待每个元素递增 1 的输出。显然情况并非如此。

仔细一看,我认为是因为bind2nd函数的返回值被丢弃了;也就是说该函数不会修改容器的元素。

我的想法对吗?有人可以确认或提供容器未被修改的正确解释吗?

#include <vector>
#include <iostream>
#include <algorithm>
#include <functional> using namespace std; void printer(int i) {
cout << i << ", "; } int main() {
int mynumbers[] = { 8, 9, 7, 6, 4, 1 };
vector<int> v1(mynumbers, mynumbers + 6);
for_each(v1.begin(), v1.end(), bind2nd(plus<int>(), 1));//LINE I
for_each(v1.rbegin(), v1.rend(), printer);//LINE II
return 0; }

最佳答案

operator()的声明的 template <typename T> std::plus

T operator()(const T& lhs, const T& rhs) const;

即它不会修改输入参数。你需要std::transform :

std::transform(v1.cbegin(), v1.cend() v1.begin(), std::bind2nd(std::plus<int>(), 1));

或者您可以使用一个 lambda,它修改它的输入参数:

std::for_each(v1.begin(), v1.end(), [] (int& x) { ++x; });

关于c++ - bind2nd 在 for_each 循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36286070/

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