1

char * p私はそれにアクセスするために使用するメモリを持っています。

それを参考にしたい。どうやって作るの?

vector<char>& v = p

ベクトルに変換するために p の代わりに何をする必要がありますか。メモリで使用する char * のサイズも伝える必要があります。

4

3 に答える 3

1

基本的に:

  • ベクトルはそのメモリを所有しており、それを参照するだけではありません。そのため、データをコピーする新しいベクターを作成できますが、ベクターを取得してポインターを「取得」し、それを使用することはできません。

  • サードパーティの API に渡すベクトルが必要で、ポインターがある場合は、コピーを作成する必要があります。

  • API を制御している場合は、ポインターの範囲 (開始/終了) またはポインターとサイズを取得するように変更できます。このようにして、ベクトルが既にある場合でも、これらの関数にアクセスできます (ただし、ポインターを期待begin()end()て提供することはできません。ただし、これらを使用してポインターとして取得&v[0]し、そのポインターにサイズを追加する方法があります)。

  • データを標準アルゴリズムに入れるだけでよい場合は、ポインターを使用して既にそれを行うことができます。

明らかに、ポインターがある場合、push_back などのデータ サイズを変更するベクトル操作を実行することはできません。ただし、char*ないのでconst char*、メンバーを変更できます。

于 2012-12-31T14:30:07.100 に答える
1

これ以上の情報がなければ、この質問に答えるのは難しいですが、試してみます。最も簡単な解決策は、おそらく 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 が書いているように、これはデータを新しいベクターにコピーします。

于 2012-12-31T09:35:18.580 に答える
0

メモリ ブロックを指すポインタ p がある場合

char* p = new char[100];

書くことでそれへの参照を作成できます

char& q = *p;

コンテナを使用する場合はvector、ヨハンが言うように内容をベクターにコピーする必要があります

于 2012-12-31T10:05:41.300 に答える