2009-09-09 3 views

答えて

30

あなたが利用可能vector<char>を持っている場合、あなたはおそらく最高のvector<char>::insertメソッド呼び出している:ベクトルへの委任

std::vector<char> vec; 

const char* values="values"; 
const char* end = values + strlen(values); 

vec.insert(vec.end(), values, end); 

は、ベクターは、その最後の時に決めることができますので、back_inserterを使用することが好ましいことですサイズ。 back_inserterpush_backとなり、再割り当てが増える可能性があります。

4

私は適切な方法が

vec.insert(vec.end(),buf,buf+length); 

または

std::copy(buf,buf+length,std::back_inserter(vec)); 

に編集だと思う:私は2つの例を並べ替え、それはそれは私だけだ、コメンターが間違っているということではありません;-)

+0

ベクトルはイテレータがランダムアクセスイテレータであることを推測して事前に予約して、再割り振りを保存することができるため、最初のものも正しくあります。 – sbi

+0

真。私はそれから多くを期待していないだろう。とにかく、ローマには複数の道があります;-) –

+0

多くの現代的な実装が単純なケースを最適化するので、私は実際には2番目の方が良いと思います。 'vector <>'はシンプルなテンプレートで、 'char *'は単純なイテレータで 'char'はシンプルなPODです。 – MSalters

1

私はそれをコンパイルしていないが、それはのようなものでなければなりません:

const char string1[] = "a string"; 
std::vector<char> vData; 
vData.insert(vData.end(), string1, string1+strlen(string1)); 
関連する問題