「配列」の版間の差分
提供: 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; }