作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 std::pair 类型元素的 std::vector。通过某种算法,我返回了两个迭代器(范围),因此我想获取该范围内的所有元素并将该对的第一个条目复制到另一个 vector
std::vector< pair<double, int> > data;
std::vector<double> data2;
std::vector< pair<double, int> >::iterator it1, it2;
for (;it1!=it2; it1++)
{
data2.push_back(it1->first);
}
使用循环可以做到这一点,但我想知道是否有一个简单的 STL 算法可以做到这一点。由于数据量很大,而且以上操作会重复多次,所以使用循环很慢。
最佳答案
如果您正在寻找一种算法来为您执行此操作,则可以使用 std::transform
的四个参数重载:
#include <algorithm> // for transform
#include <iterator> // for back_inserted and distance
....
std::vector< pair<double, int> > data;
std::vector<double> data2;
data2.reserve(std::distance(it1, it2));
std::transform(it1,
it2,
std::back_inserter(data2),
[](const std::pair<double, int>& p){return p.first;});
如果您不支持 C++11,您可以使用函数代替 lambda 表达式:
double foo(const std::pair<double, int>& p) { return p.first; }
std::transform(it1,
it2,
std::back_inserter(data2),
foo);
关于c++ - 如何将 vector 中 pair 的第一个元素复制到另一个 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17911639/
我是一名优秀的程序员,十分优秀!