如何在C++中仅获取容器内类成员的迭代器
How to get iterator over only the members of a class inside a container in C++
在C++中,我想知道是否有办法获取一个迭代器,该迭代器仅在类包含在容器中时遍历类的特定成员。
情况如下。
class Edge : public std::pair<int, int> {
private:
int length;
public:
int weight;
Edge::Edge(int v1, int v2): std::pair<int, int>(v1, v2) { }
}
int main() {
enum nodes { A, B, C, D, E };
const int num_nodes = 5;
vector<Edge> edge_vec = { Edge(A, C), Edge(C, D), Edge(B, D), Edge(B, E) };
int weights[] = { 1, 2, 7, 3 }; // I don't like this part.
graph_t g(edge_vec.begin(), edge_vec.end(), weights, num_nodes);
}
graph_t
的定义是graph_t (,, Iterable,);
。
因此,任何可迭代对象都可以分配为第三个参数。
问题是这个。
我不想使用单独的int weights[]
数组,因为 Edge 类已经有weight
.
所以我想得到一个可以初始化如下然后遍历的迭代器。
edge_vec[0].weight = 1;
edge_vec[1].weight = 2;
edge_vec[2].weight = 7;
edge_vec[3].weight = 3;
在这种情况下,weight
经常更新,因此我想使用指针而不是单独数据结构中的副本来访问它。
处理这个问题的最有效和最优雅的方法是什么?
#include <boost/iterator/transform_iterator.hpp>
// ...
boost::transform_iterator wbegin(edge_vec.begin(), std::mem_fn(&Edge::weight));
boost::transform_iterator wend(edge_vec.end(), std::mem_fn(&Edge::weight));
相关文章:
- "迭代器"和"const_iterator"不是 STL 容器的必需成员?
- 如何将迭代器调用转发给类的私有成员?
- 成员函数中的迭代器出现问题
- 如何在C++中仅获取容器内类成员的迭代器
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 为什么向量的.at()成员函数返回引用而不是迭代器
- 将列表迭代器存储为成员
- 使用迭代器成员函数是否仅适用于某些向量类型"empty()"?
- C++ 向量::使用类对象迭代器擦除不擦除向量成员
- 树不维护递归迭代器成员
- 如何将迭代器变量声明为私有成员变量
- 我如何从循环内部使用迭代器的函数内部的getter中检索特定的成员
- C :我可以将成员变量的迭代器带入班级之一
- 如何使用C STD :: SET中的迭代器访问成员功能
- C++:将成员容器的迭代器接口转发到类接口
- 如何从 std 容器的迭代器为成员元素创建迭代器
- 通过迭代器为映射的成员赋值
- 如果我创建一个修改值的迭代器,静态成员"reference"应该是什么类型?
- C++迭代器作为类方法中使用的类成员
- 类成员向量上的迭代器未正确取消引用