我有一个非常简单的方法,增加了一个节点图:为什么添加到C++ STL向量的对象的地址与原始地址不同?
template<class T>
void AdjacencyList<T>::add(const GraphNode<T>& node) {
_nodes.push_back(node);
}
在另一种方法,我遍历_nodes
向量,按地址寻找添加的节点:
for (unsigned int i = 0; i < _nodes.size(); i++) {
if (&(_nodes[i]) == &node)
// do something
}
然而,这是不行的,因为当我添加node
到_nodes
载体,新增加的成员有不同的地址:
Graph::AdjacencyList<int>::add (this=0x8052338, node=...) at ../AdjacencyList.h:42
42 _nodes.push_back(node);
(gdb) p node
$1 = (const Graph::GraphNode<int> &) @0xbffff39c: {value = 123}
(gdb) n
43 }
(gdb) p _nodes[0]
$4 = (Graph::GraphNode<int> &) @0x80522b0: {value = 123}
世界正在发生什么?更重要的是,我应该如何将一个成员添加到矢量中,以便以后可以找到它?
感谢所有伟大的答案,伙计们! – 2011-04-19 08:52:24