我有一个定义为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]
来访问基础指针?
答案 0 :(得分:4)
如果您知道自己有std::vector<T>::iterator
,那么&*it
是安全的。
但请注意,将其转换为unsigned long long *
是不安全的,因为对齐要求会有所不同。
答案 1 :(得分:2)
您可以使用&(*start)
获取指向矢量开头的指针。从那以后,您可以使用指针算法。但关于unsigned long long*
的内容是什么?