如何解决任何令人满意的迭代器递归来替换类型为$ a [i] = b [i] * c [i] $
由于迭代器更加灵活,我正在尝试使代码更具可读性,并避免带有索引的循环。
虚拟数据
time a b
0 6 7
0.5 2 1.5
1.0 9 3
1.5 0 2
现在为了计算向量c
,我通常会引入for循环
vector<double> c;
for (int i = 0; i < a.size(); i++)
{
c[i] = a[i] * b[i];
}
但是,为了避免索引混乱并提高代码的可读性,我想使用迭代器。
到目前为止,我的尝试:
vector<double> c;
vector<double>::iterator it_a,it_b;
for (it_a = a.begin(); it_a != a.end(); it_a++)
{
for (it_b = b.begin(); it_b != b.end(); it_b++)
{
if (it_b == it_a)
{
c.push_back((it_a *)*(it_b *));
}
}
}
我很确定这是错误的。有什么想法吗?
解决方法
如果您想提高可读性,请使用STL算法:
// Initialise result vector
vector<double> c(a.size());
// Iterate through a & b and push the result of the binary func into c
std::transform(a.cbegin(),a.cend(),b.cbegin(),c.begin(),std::multiplies<>{});
,
我想问题出在if(it_b == it_a)。我不明白为什么它们总是相等的,因为它们指向不同的数据位置。而且在O(n)的第一种情况下,您也不需要两个for循环来明显地节省时间。
it_a=a.begin();
it_b=b.begin();
while(it_a!=a.end()&&it_b!=b.end())
{
c.push_back((it_a*)*(it_b*));
it_a++;
it_b++;
}
我认为上述代码会有所帮助。并且在注释中提到使用索引实际上更具可读性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。