是否可以从给定的迭代器访问基础指针到向量?

时间:2011-01-27 10:11:09

标签: c++ iterator

我有一个定义为vector<char>的向量,我有一些函数可以在接收范围的某个点被调用 - 如下所示:

template <typename Iterator>
void foo(Iterator& start, Iterator& end)
{
}

在上面的函数中,我目前调用std::find来查找给定的字符 - 这太慢了(我知道这是因为我已经分析了 - :))。我想做什么(在未来的某个时候是使用SSE4.2内在函数来搜索角色),但是现在,我想做的是矢量搜索,即类似下面的内容(不是安全操作)。

unsigned long long* scanv = reinterpret_cast<unsigned long long*>(<access pointer at start>);
// some byte magic.

所以我的问题是 - 执行此操作的唯一方法是也传递向量,然后执行distance,然后&vect[index]来访问基础指针?

2 个答案:

答案 0 :(得分:4)

如果您知道自己有std::vector<T>::iterator,那么&*it是安全的。

但请注意,将其转换为unsigned long long *是不安全的,因为对齐要求会有所不同。

答案 1 :(得分:2)

您可以使用&(*start)获取指向矢量开头的指针。从那以后,您可以使用指针算法。但关于unsigned long long*的内容是什么?