ac 配列をコンテナーに書き込みたいのですが、可能であれば変更したいと考えています。vector を使用することを考えていましたが、 write(*pchararray, len); があるようです。関数。文字列は次善の策のように見えましたが、それにも書き込み機能はありませんか?
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') を問題なく処理します。
于 2009-02-19T17:46:58.863 に答える
0
この場合(ベクトルにはPODタイプが含まれているため)、std :: copyを使用するよりも、memcpyを使用する方をお勧めします。これは、ALOTの方が高速です。
于 2009-02-19T17:10:44.633 に答える