我在全局范围内有一个myObjects的向量.我有一个方法,它使用a std::vector
遍历向量,并进行一些比较以找到一个特定的元素.一旦找到了必需的元素,我希望能够返回指向它的指针(向量存在于全局范围内).
如果我返回&iterator
,我是否返回迭代器的地址或迭代器指向的地址?
我需要将const_iterator
背面强制转换为myObject,然后返回该地址吗?
返回迭代器指向的东西的地址:
&(*iterator)
编辑:澄清一些困惑:
vectorvec; // a global vector of ints void f() { vec.push_back( 1 ); // add to the global vector vector ::iterator it = vec.begin(); * it = 2; // change what was 1 to 2 int * p = &(*it); // get pointer to first element * p = 3; // change what was 2 to 3 }
不需要指针或动态分配的向量.
返回&迭代器将返回迭代器的地址.如果要返回引用元素的方式,则返回迭代器本身.
请注意,为了返回迭代器/指针,您不需要向量是全局的,但向量中的操作可以使迭代器无效.例如,如果new size()大于保留的内存,则向向量添加元素可以将向量元素移动到不同的位置.从向量中删除给定项之前的元素将使迭代器引用不同的元素.
在这两种情况下,根据STL实现,可能很难通过每次经常发生的随机错误进行调试.
评论后编辑:'是的,我不想返回迭代器a)因为它的const,而b)肯定它只是一个本地的临时迭代器? - Krakkos'
迭代器不比任何其他变量更多或更少本地或临时,并且它们是可复制的.您可以返回它,编译器将使用指针为您创建副本.
现在有了常数.如果调用者想要通过返回的元素(无论是指针还是迭代器)执行修改,那么您应该使用非const迭代器.(只需从迭代器的定义中删除'const_').