Fra*_*ank 44 c++ pointers iterator stl vector
我有一个std::vector与n元素.现在我需要将指针传递n-1给具有函数最后元素的向量.
例如,我的vector<int> foo包含(5,2,6,87,251).一个函数需要vector<int>*,我想传递一个指针(2,6,87,251).
我可以(安全地)获取迭代器++foo.begin(),将其转换为指针并将其传递给函数吗?还是用&foo[1]?
更新:人们建议我改变我的函数来获取迭代器而不是指针.在我的情况下,这似乎是不可能的,因为我提到的find功能是...的功能unordered_set<std::vector*>.那么在这种情况下,是将n-1元素复制foo到一个新的向量中并find使用指向该唯一选项的指针进行调用?非常低效!这就像画家Shlemiel,特别是因为我必须查询许多子集:最后一个n-1,然后n-2等等元素,看看它们是否在unordered_set.
Rob*_*ide 87
在这里,获取对迭代器使用的相应指针的引用:
例:
string my_str= "hello world";
string::iterator it(my_str.begin());
char* pointer_inside_buffer=&(*it); //<--
Run Code Online (Sandbox Code Playgroud)
[通知操作符*返回一个引用,因此对引用执行&将为您提供地址].
在我的情况下这似乎是不可能的,因为我提到的功能是查找功能
unordered_set<std::vector*>.
您使用自定义散列/谓词函数对象吗?如果没有,那么您必须将unordered_set<std::vector<int>*>::find()指针传递给您要查找的确切向量.指向具有相同内容的另一个向量的指针将不起作用.至少可以说,这对于查找不是很有用.
使用unordered_set<std::vector<int> >会更好,因为那样你就可以按值执行查找.我认为这也需要一个自定义哈希函数对象,因为据hash我所知不具备专业化vector<int>.
无论哪种方式,指向矢量中间的指针本身并不是矢量,正如其他人所解释的那样.您无法将迭代器转换为指向vector的指针而不复制其内容.
如果可以,更好的选择可能是更改函数以将迭代器作为元素或全新的向量(如果它不修改).
虽然你可以用数组做这类事情,因为你知道它们是如何存储的,但对于向量来说也是一个坏主意.&foo[1]没有这种类型vector<int>*.
此外,虽然STL实现可以在线获得,但尝试依赖抽象的内部结构通常存在风险.