有适用于 C++11的代码:
#include <algorithm>
#include <iostream>
#include <vector>
#include <utility>
#include <iterator>
typedef std::pair<void*, int> pair;
int main(){
std::vector<pair> s;
std::vector<int> r;
pair p1(NULL, 42);
pair p2(NULL, 100500);
s.push_back(p1);
s.push_back(p2);
std::transform(s.begin(), s.end(), std::back_inserter(r), static_cast<const int&(*)(const pair&)>(std::get<1>));
std::copy(r.begin(), r.end(), std::ostream_iterator<int>(std::cout, " "));
}
结论:
42 100500
我想在不使用自定义类型仿函数/函数的情况下在 C++03 中实现类似的东西:
struct F {
int operator()(const pair& p) { return p.second; }
};
或者
int f(const pair& p) { return p.second; }
和这样的电话:
std::transform(s.begin(), s.end(), std::back_inserter(r), F());
这可以通过一系列预构建的库适配器来完成吗?std::get还没有在 C++03 中。
我也不想for改用手动循环,因为。transform这需要提及迭代器的类型,并且算法不是为手动编写循环而发明的。
国际SO 社区表示,C++03中没有针对 getter
first和second成员的标准函数。std::pair结果,没有办法解决问题。谢谢大家的参与:)MSVC 2010 编译器
结论: