我知道使用 transform
我可以像这样向一些 vector 添加一个常量:
std::vector<int> a(3, 2);
std::transform( a.begin(), a.end(), a.begin(), std::bind2nd( std::plus<double>(), 1 ) );
我想知道如何修改 transform
以将常量添加到 vector 的某些切片 [index:end]
中,例如最后两个元素。
我可以用一个循环来完成,例如:
for (int i=1; i < a.size(); i++) {
a.at(i) += 1;
}
但也许有更好的选择
最佳答案
只是最后 N
个元素?使用反向迭代器:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main() {
std::vector<int> a(3, 2);
std::transform(a.rbegin(), std::next(a.rbegin(), 2), a.rbegin(),
[](auto n) { return n + 1; });
for (auto n : a) {
std::cout << n << '\n';
}
return 0;
}
(如果您出于某种原因需要更改 a
到没有随机迭代器的容器类型。)
关于C++将常量添加到 vector 切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55933886/