我目前正在尝试学习如何有效地使用c ++的STL部分。假设有2个相同类型的相同长度的向量需要通过应用一些运算符转换为相同长度的另一个向量,是否有一种使用STL功能的好方法?
这是我正在尝试做的一些伪代码:
vector<T> a;
vector<T> b;
vector<T> result;
for (int i = 0; i < a.size(); ++i){
result.at(i) = a.at(i) op b.at(i);
}
其中“op”是为类型T定义的某个运算符。
答案 0 :(得分:8)
您可能需要检查尺寸,但通常可以使用std::transform
。
E.g。 (对于+
- <functional>
包含此和其他二元运算符的函数对象的类模板)
std::transform( a.begin(), a.end(), b.begin(), result.begin(), std::plus<T>() );
您需要确保b.size() >= a.size()
和result.size() >= a.size()
。如果result
开头为空,那么您可以使用back_insert_iterator
来填充它,而无需先调整容器大小。
答案 1 :(得分:3)
你可以使用std :: transform: http://www.cplusplus.com/reference/algorithm/transform/
答案 2 :(得分:0)
好的,我可能错了,但是:
简短回答:没有
很长的回答:也许应该对它做一些聪明的事情,但是将代码编写为循环更具可读性。
它让我想起了以下问题:
“给定向量x和相同大小的向量y,同时置换x和y的元素,使y根据某个谓词进行排序”
我无法直接使用某些STL算法解决(除了繁琐的ad-hoc迭代器类,可能是通用的,但是写一个快速的快速排序更容易 - 这就是为什么我有一个爱恨交织的关系用c ++)