3

ac 配列をコンテナーに書き込みたいのですが、可能であれば変更したいと考えています。vector を使用することを考えていましたが、 write(*pchararray, len); があるようです。関数。文字列は次善の策のように見えましたが、それにも書き込み機能はありませんか?

4

7 に答える 7

7

与えられた

char myarray[10];

STLiteratorを使用できます:

vector <char> v;
copy(myarray, myarray + 10, back_inserter(v));

コンストラクターを使用できます:

vector <char> v(myarray, myarray + 10);

サイズを変更してコピーできます:

vector<char> v(10);
copy(myarray, myarray + 10, v.begin());

(そしてこれらはすべて文字列に対して同様に機能します)

コメント/他の回答に感謝します:)

于 2009-02-19T15:55:44.280 に答える
3

ベクター、文字列、およびその他の多くのコンテナーには、この目的のために「2 つのイテレーター」コンストラクターがあります。

char raw_data[100];
std::vector<char> v(raw_data, raw_data + 100);
std::string s(raw_data, raw_data + 100);
于 2009-02-19T16:06:02.657 に答える
2

コンテナの選択は、個々の要素の使用法によって異なります。ac文字配列をconatinerにコピーする場合は、次のように使用できます。

char buf[ n ];
std::vector<char> vc(n); // Thanks to Éric 
std::copy(buf, buf + n, vc.begin()); 
于 2009-02-19T15:56:17.403 に答える
1

「書き込み」コメントの意味が正確にはわかりませんが、

std::vector<char> charBuffer;

ac char(byte)配列と機能的に同等です

&charBuffer[0]

隣接する基礎となるメモリを提供します。

だから今あなたはすることができます

charBuffer.resize(100);
memcpy(&charBuffer[0], src, charBuffer.size());
于 2009-02-19T15:52:37.437 に答える
1

ベクトルを使用できます。サイズを事前に割り当ててから、最初のバイトをアドレス指定します。ベクトルは連続していることが保証されているため、これは常に有効です。

std::vector<char> vBuffer;
vBuffer.resize(nLength);
std::copy(pStart, pEnd, &vBuffer[0]);
于 2009-02-19T15:53:38.740 に答える
1

以下を使用できます。

string s( pchararray, len );  // constructor

または:

string s;  s.append( pchararray, len ); // append example.

または必要に応じて string::insert() 。

長さを指定すれば、文字列はヌル文字 ('\0') を問題なく処理します。

http://www.cplusplus.com/reference/string/string/を参照して ください

于 2009-02-19T17:46:58.863 に答える
0

この場合(ベクトルにはPODタイプが含まれているため)、std :: copyを使用するよりも、memcpyを使用する方をお勧めします。これは、ALOTの方が高速です。

于 2009-02-19T17:10:44.633 に答える