「配列」の版間の差分

提供: C++入門
移動: 案内検索
(ページの作成:「配列 (array)とは、同一の型のデータをメモリ上に連続で並べたものです。C++でデータの列を扱うときに利用されます。配列...」)
 
 
行16: 行16:
 
C++では、STLの[[コンテナ]]があり、[[配列]]を使わずに、[[std::vector]]などのコンテナを利用してコーディングすることもあります。
 
C++では、STLの[[コンテナ]]があり、[[配列]]を使わずに、[[std::vector]]などのコンテナを利用してコーディングすることもあります。
 
[[配列]]に似ているものとして、C++では、[[std::array]]が提供されています。基本的に固定長の[[配列]]で、[[配列]]に似ていますが、メンバのatを使用すると境界チェックが行われるため、安全にデータにアクセスできるメリットがあります。
 
[[配列]]に似ているものとして、C++では、[[std::array]]が提供されています。基本的に固定長の[[配列]]で、[[配列]]に似ていますが、メンバのatを使用すると境界チェックが行われるため、安全にデータにアクセスできるメリットがあります。
 +
 +
== 配列の初期化 ==
 +
* [[std::iota]]で各要素に連番の値を代入する。
 +
* [[std::generate]]で各要素に値を代入する。
 +
* [[std::for_each]]で各要素に値を代入する。
 +
* [[std::fill]]で各要素に同じ値を代入する。
 +
* [[for]]文で1つ1つ代入する。
  
 
== メモリの動的確保と解放の例 ==
 
== メモリの動的確保と解放の例 ==

2014年1月4日 (土) 01:32時点における最新版

配列 (array)とは、同一の型のデータをメモリ上に連続で並べたものです。C++でデータの列を扱うときに利用されます。配列を動的に確保する場合には、new/deleteを使用します。

読み方

配列
はいれつ
array
あれい

概要

C++では、C言語と同様の配列を扱えます。

int a[5] = { 1,2,3,4,5 };
cout << a[0] << endl;
a[0] *= 10;

C++では、STLのコンテナがあり、配列を使わずに、std::vectorなどのコンテナを利用してコーディングすることもあります。 配列に似ているものとして、C++では、std::arrayが提供されています。基本的に固定長の配列で、配列に似ていますが、メンバのatを使用すると境界チェックが行われるため、安全にデータにアクセスできるメリットがあります。

配列の初期化

  • std::iotaで各要素に連番の値を代入する。
  • std::generateで各要素に値を代入する。
  • std::for_eachで各要素に値を代入する。
  • std::fillで各要素に同じ値を代入する。
  • for文で1つ1つ代入する。

メモリの動的確保と解放の例

ソースコード new_array1.cpp

メモリの動的確保には、newを使用し、解放には、deleteを使用します。 delete で解放するときに [] を指定しなければなりません。

#include <iostream>
#include <exception>
using namespace std;
 
int main(int argc, char const* argv[])
{
        try {
                int *p = new int[10];   // 動的確保
 
                p[0] = 10;
                cout << p[0] << endl;
 
                delete [] p;            // メモリの開放
        } catch (std::exception& e) {
                cerr << e.what() << endl;
        }
        return 0;
}

コンパイル

g++  new_array1.cpp -o new_array1

実行例

% ./new_array1
10

スマートポインタと配列

動的確保した配列をスマートポインタで扱うには、std::unique_ptrを使用します。詳細については、std::unique_ptrをご参照ください。

#include <memory>
try {
	std::unique_ptr<int[]> a(new int[10]);
	a[0] = 10;
	a[1] = 11;
	// ...
} catch (std::exception &ex) {
	std::cerr << ex.what () << std::endl;
}

関連項目