gpt4 book ai didi

c++ - 无法将迭代器分配给二元函数中的常量输入 vector

转载 作者:太空宇宙 更新时间:2023-11-04 16:27:42 24 4
gpt4 key购买 nike

我正在尝试编写一个二元函数,它接受两个 vector (相同长度)并按值相加。由于某种原因,以下代码不起作用:

struct Plusval : binary_function <std::vector<int>,std::vector<int>,std::vector<int> > 
{
std::vector<int> operator() (const std::vector<int>& x, const std::vector<int>& y) const
{
std::vector<int> ret(x);
std::vector<int>::iterator itx,ity;
ity=y.begin();
for (itx=ret.begin();itx<ret.end();++itx)
{
ret[*itx]+=y[*ity];
++ity;
}
return ret;
}
};

我得到一个错误,我不能做 ity=y.begin()但是,下面的代码确实有效

struct Plusval : binary_function <std::vector<int>,std::vector<int>,std::vector<int> > 
{
std::vector<int> operator() (const std::vector<int>& x, const std::vector<int>& y) const
{
std::vector<int> ret(x);
std::vector<int> yloc(y);
std::vector<int>::iterator itx,ity;
ity=yloc.begin();
for (itx=ret.begin();itx<ret.end();++itx)
{
ret[*itx]+=yloc[*ity];
++ity;
}
return ret;
}
};

显然,第二个版本需要更长的时间(因为它必须复制一个额外的 vector )。是因为输入是一个常量 vector 吗?如果是,是否有任何理由需要这样做?请注意,如果有任何不同,我计划将此函数用作 boost::mpi 中 allreduce() 函数的输入

最佳答案

你将 ity 定义为 vector::iterator yconst 并返回一个 const_iterator

更重要的是:不要使用binary_function。适配器已被弃用。

此外,您的函数没有按照您的要求执行。 *itx 返回存储在 itx 指向的位置的值,您可以使用它来索引您打算返回的 vector

我会用二进制转换来写这个。

std::vector<int> res;
std::transform(begin(x), end(x), begin(y),
std::back_inserter(res), std::plus<int>());

关于c++ - 无法将迭代器分配给二元函数中的常量输入 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10302504/

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