Можно ли получить доступ к базовому указателю от данного итератора к вектору? - PullRequest
3 голосов
/ 27 января 2011

У меня есть вектор, определенный как 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 ]

4 голосов
/ 27 января 2011

Если вы знаете, что у вас есть std::vector<T>::iterator, то это безопасно сделать &*it.

Обратите внимание, однако, что преобразование этого значения в unsigned long long * небезопасно, так как выравниваниетребования будут другие.

2 голосов
/ 27 января 2011

Вы можете получить указатель на начало вашего вектора, используя &(*start). С этого момента вы можете использовать арифметику указателей. Но что это за unsigned long long*?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...