有没有办法重命名map迭代器的第一个和第二个访问器函数.我知道他们有这些名称是因为代表键和值的底层对,但我希望迭代器更具可读性.我认为这可能是使用迭代器适配器,但我不知道如何实现它.
请注意,我不能使用提升.
我的意思是:
map<Vertex, Edge> adjacency_list;
for(map<Vertex, Edge>::iterator it = adjacency_list.begin();
it != adjacency_list.end();
++it)
{
Vertex v = it->first;
//instead I would like to have it->vertex
}
Run Code Online (Sandbox Code Playgroud) 它们是否与scala中的C#Expression API相当?
例如,我想要像这样的lambda:
(Foo) => Foo.bar
Run Code Online (Sandbox Code Playgroud)
并能够在传递给它的函数中访问"bar".
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
struct Point
{
int x;
int y;
Point(int x, int y) :
x(x),
y(y)
{}
};
int main()
{
vector<Point> points;
points.push_back(Point(1, 2));
points.push_back(Point(4, 6));
vector<int> xs;
for(vector<Point>::iterator it = points.begin();
it != points.end();
++it)
{
xs.push_back(it->x);
}
copy(xs.begin(), xs.end(), ostream_iterator<int>(cout, " "));
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何使用STL算法获得与上面的for循环相同的结果?我已经尝试过使用for_each的一些东西,但是无法让它工作.