【发布时间】:2019-05-01 09:03:13
【问题描述】:
我知道transform 我可以像这样向某个向量添加一个常量:
std::vector<int> a(3, 2);
std::transform( a.begin(), a.end(), a.begin(), std::bind2nd( std::plus<double>(), 1 ) );
我想知道如何修改transform 以将常量添加到向量的某个切片[index:end],例如最后两个元素。
我可以通过循环来做到这一点,例如:
for (int i=1; i < a.size(); i++) {
a.at(i) += 1;
}
但也许有更好的选择
【问题讨论】:
-
我也试过了,但奇怪的是产生
3 3 2而不是2 3 3 -
抱歉,您需要同时添加两个开始迭代器。
-
您如何认为您的 for 循环不是最佳的,即。你想以什么方式让它变得更好?以后更容易理解吗?让未来的开发人员阅读您的代码更容易理解?只是更少的代码?编译器优化后效率更高?
-
我不知道,我对 C++ 不是很熟悉,我读过一个应该使用
<vector>库...不确定这是否包括使用transform以及 @hyde -
@eok 它没有,标准算法的重点是它们是通用的。他们可以使用许多不同列表类型的迭代器,包括但不限于
std::vector、std::list、std::array等...