我有定義爲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]
訪問底層指針的唯一途徑?
順便提一句,你是否考慮過使用`string`來代替`vector`? `string :: find()`可能會針對這類事情進行優化。 –
2011-01-27 10:16:00
在制定優化計劃之前,你怎麼敢分析一下!你應該開始他們,沒有計劃,沒有指導,然後想知道爲什麼你的程序破碎,混亂,無法修復;修正它。 :) – GManNickG 2011-01-27 10:16:32
@Oli,是的,底層的`strchr`已針對SSE4.2進行了優化,但目前我無法訪問支持此功能的內核(以及相應的glibc版本),而我正在使用` std :: string` with`vector`,因爲其他操作(複製,刪除,搜索序列等)似乎速度更快... – Nim 2011-01-27 10:20:42