せずに、配列のうちのベクトルを作る:大雑把に、私はすべての場所で、このAPIを持っ割り当てとメモリコピー
void func(const vector<int> &vint);
ひどく、設計されていますが、私は割り当て\コピーせずにそれに私のint*
を渡す必要がありますされていますボトルネックだと分かったからです。 (複数のスレッドで同時にmemcpy
を実行すると速くコピーされません)
私はこのようなクラスを書くことを考えた:
template<typename T>
struct fake_vector {
fake_vector(T *array, size_t array_length) {
internal_vector.set_begin(array);
internal_vector.set_end(array + array_length);
}
~fake_vector() { // let's reset our internal vector so it won't try to deallocate our memory
internal_vector.set_begin(nullptr);
internal_vector.set_end(nullptr);
}
vector<T> &get() {
return internal_vector;
}
vector<T> internal_vector;
};
そして、このようにそれを使用します。
fake_vector<int> my_fake_vector(vint,vint_length);
process(my_fake_vector.get());
しかし、私はドンベクトルのbegin \ endを設定する方法は分かりません。この質問は、この最後のパズルまたは新しいハックの少ない解決策fake_vector
の解決策には無期限です。
vector<T>
を継承し、それはこのような
_M_impl._M_start
と
_M_impl._M_finish
だと微調整することにより、あなたはでき
最初の/最後のイテレータのペアを取るために 'func()'をリファクタリングします。 –
@RichardHodges APIはプロジェクトの一部ではありません。 – LyingOnTheSky
代わりに、ベクトル要件をスタックの上位に伝播できますか?つまり、最初は未処理配列を使用しないでください。 – GManNickG