C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのstd::vectorとstd::arrayの違い


ベクトルと配列の違いは次のとおりです-

  • Vectorは、インデックスベースではなく要素を格納するためのシーケンシャルコンテナです。
  • 配列は、同じタイプの要素の固定サイズの順次コレクションを格納し、インデックスベースです。
  • ベクトルは本質的に動的であるため、要素を挿入するとサイズが大きくなります。
  • アレイは固定サイズであるため、一度初期化するとサイズを変更できません。
  • ベクターはより多くのメモリを占有します。
  • 配列はメモリ効率の高いデータ構造です。
  • ベクターは要素へのアクセスに時間がかかります。
  • 要素は連続したメモリ割り当てに配置されるため、場所に関係なく一定時間で要素にアクセスできます。

ベクトルと配列は、次の構文で宣言できます-

Vector declaration:vector<datatype>array name;
Array declaration:type array_name[array_size];
Vector initialization:vector<datatype>array name={values};
Array initialization:datatype arrayname[arraysize] = {values};

std ::vector:

サンプルコード

#include <iostream>
#include <vector>
using namespace std;
int main() {
   vector<vector<int>>v{ { 4, 5, 3 }, { 2, 7, 6 }, { 3, 2, 1 ,10 } };
   cout<<"the 2D vector is:"<<endl;
   for (int i = 0; i < v.size(); i++) {
      for (int j = 0; j < v[i].size(); j++)
         cout << v[i][j] << " ";
         cout << endl;
   }
   return 0;
}

出力

the 2D vector is:
4 5 3
2 7 6
3 2 1 10

std ::array:

サンプルコード

#include<iostream>
#include<array>
using namespace std;

int main() {
   array<int,4>a = {10, 20, 30, 40};
   cout << "The size of array is : ";
   //size of the array using size()
   cout << a.size() << endl;
   //maximum no of elements of the array
   cout << "Maximum number of elements array can hold is : ";
   cout << a.max_size() << endl;
   // Printing array elements using at()
   cout << "The array elements are (using at()) : ";
   for ( int i=0; i<4; i++)
      cout << a.at(i) << " ";
      cout << endl;
      // Filling array with 1
      a.fill(1);
      // Displaying array after filling
      cout << "Array after filling operation is : ";
   for ( int i=0; i<4; i++)
      cout << a[i] << " ";
      return 0;
}

出力

The size of array is : 4
Maximum number of elements array can hold is : 4
The array elements are (using at()) : 10 20 30 40
Array after filling operation is : 1 1 1 1

  1. C++での関係演算子(==)とstd ::string ::compare()の違い

    関係演算子==とstd::string ::compare()の違いは1つだけです。それが戻り値です。内部的には、string ::operator ==()はstring ::compare()を使用しています 関係演算子(==)は、2つの文字列が等しいかどうかを示すブール値を返し、compareは、文字列の相互関係を示す整数を返します。 ユースケースを詳しく説明するために、compare()は、2つの文字列がたまたま異なっている場合に、2つの文字列が互いにどのように関連するか(小さいか大きいか)に関心がある場合に役立ちます。たとえば、 例 #include <iostream>

  2. C++でのendlと\nの比較

    \ n改行を出力します(適切なプラットフォーム固有の表現であるため、Windowsでは \ r \ nを生成します)が、std::endlは同じで、ストリームをフラッシュします。通常、ストリームをすぐにフラッシュする必要はなく、パフォーマンスが低下するだけなので、ほとんどの場合、std::endlを使用する理由はありません。 ストリームを手動でフラッシュする場合-例:出力がタイムリーにユーザーに表示されることを期待しているためです。ストリームに「\n」を書き込む代わりに、std ::endlを使用する必要があります(分離された文字または文字列の一部として)。