C ++、ベクター内の配列、文字列

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/oqqWang1234567/article/details/81809942

        C ++言語はC ++の配列は、C言語スタイルの伝統的な配列を使用することができますので、C言語と互換性があります。しかし、多くの時間でC言語形式の配列は、非常に使いやすいではありません。C ++では代わりにベクターを用いてもよいです。

         この記事では、Vector、文字列と文字配列の関係のみを考慮します。

          あなたは、文字列を使用している場合は、文字列の使用を検討していますが、唯一の配列を考慮した場合、あなたは代わりとしてのchar配列や文字列のベクトルを使用する必要があり、結局、同じではありません。

          ベクターと互換char配列:

          1、ベクトル配列

float arrHeight[] = { 1.68,1.72,1.83,2.05,2.35,1.78,2.1,1.96 };  
vector<float> vecHeight(arrHeight, arrHeight+sizeof(arrHeight)/sizeof(float));  

         図2は、ベクター配列トランスファー 
         ベクターデータが連続内部記憶空間に格納されているため、ベクタートランスフェクトされたアレイの事実は、最初のデータ及びアドレスデータのベクトルの長さを取得する必要があります。データをコピーする場合のみ、パラメータ渡しは、何も操作せずに、アドレスを直接送信することができる場合は、メモリコピー機能「のmemcpy」を借りることができます。例えば:

float *buffer = new float[sizeof(arrHeight)];  
if (!vecHeight.empty())  
{  
    memcpy(buffer, &vecHeight[0], vecHeight.size()*sizeof(float));  
}  

3.アプリケーションの推奨事項

図1に示すように、実装は、動的配列などのベクター:メモリのブロックを事前に割り当て、その後、十分ではない感情、メモリの大きなブロックの再分配、及び、自動的に前新しいメモリブロックにデータをコピーするであろう場合。

実装が格納されるデータの長さを知っている場合、したがって、効率のために、十分なメモリを開く機能をリサイズ、後続のメモリコピーを防止するために使用されてもよいです。

参考https://blog.csdn.net/ei1990/article/details/80175610

おすすめ

転載: blog.csdn.net/oqqWang1234567/article/details/81809942