char * p
私はそれにアクセスするために使用するメモリを持っています。
それを参考にしたい。どうやって作るの?
vector<char>& v = p
ベクトルに変換するために p の代わりに何をする必要がありますか。メモリで使用する char * のサイズも伝える必要があります。
基本的に:
ベクトルはそのメモリを所有しており、それを参照するだけではありません。そのため、データをコピーする新しいベクターを作成できますが、ベクターを取得してポインターを「取得」し、それを使用することはできません。
サードパーティの API に渡すベクトルが必要で、ポインターがある場合は、コピーを作成する必要があります。
API を制御している場合は、ポインターの範囲 (開始/終了) またはポインターとサイズを取得するように変更できます。このようにして、ベクトルが既にある場合でも、これらの関数にアクセスできます (ただし、ポインターを期待begin()
しend()
て提供することはできません。ただし、これらを使用してポインターとして取得&v[0]
し、そのポインターにサイズを追加する方法があります)。
データを標準アルゴリズムに入れるだけでよい場合は、ポインターを使用して既にそれを行うことができます。
明らかに、ポインターがある場合、push_back などのデータ サイズを変更するベクトル操作を実行することはできません。ただし、char*
ないのでconst char*
、メンバーを変更できます。
これ以上の情報がなければ、この質問に答えるのは難しいですが、試してみます。最も簡単な解決策は、おそらく p を正しい型のポインターにキャストしてから、新しいベクトルを作成することです。文字のベクトルが必要な場合:
std::vector<char> wewvec(p,p+20)
20 は、要素の数を指定する場所です。つまり、データが本当に char の場合です。
データが他のタイプの場合、たとえば 20 個の float が含まれている場合は、次のようにすることができます。
const float* pf=reinterpret_cast<const float*>(p);
std::vector<float> wewvec(pf,pf+20)
Dietrich が書いているように、これはデータを新しいベクターにコピーします。
メモリ ブロックを指すポインタ p がある場合
char* p = new char[100];
書くことでそれへの参照を作成できます
char& q = *p;
コンテナを使用する場合はvector
、ヨハンが言うように内容をベクターにコピーする必要があります