2017-07-06 6 views
1

から設定された複数の変数私は、次のプログラムを持っている:C++:配列

#include <iostream> 
using namespace std; 

int main() 
{ 
    int array[] = {1, 2, 3}; 
    int a = array[0], 
     b = array[1], 
     c = array[2]; 

    cout << c << endl; 
} 

これはとても良いこれまでに、3を出力します。しかし、アレイから複数の変数を一度に宣言するためのより洗練された構文があるのだろうかと思います。例えば、(単なるアイデア、コンパイルされません):任意のCでのこのような機能++や新規格の一つは

int [a, b, c] = array; 

ありますか?私はそれを探している唯一の人になることはできません。

また、アレイから複数の変数を一度に設定する最もエレガントな方法は何ですか?

あなたが structured bindings使用できるC++ 17では
+0

私は、あなたがそれらの変数で何をしたいか、それ以降は何をしたいのかを教えてくれるといいと思います。 –

+2

C++ 11を指定したので、私は 'std: :tie' –

+1

配列を直接使用できない理由はありますか?アレイは本当にあなたの実際の問題に最も適切な構造ですか?配列は項目のリストを対象としています。データが関連するデータの集合である場合、 'class'または' struct'がより適切です。 –

答えて

6

- その構文は、あなたが投稿したものと非常によく似ています。

auto [a, b, c] = array; 

live example on wandbox


C++ 11のそれに近いものを/ 14はstd::tieですが、残念ながら配列では機能しません:std::tupleしかサポートしていません。ただし、メタプログラミングを使用して配列からタプルを作成し、その上にtieを使用するユーティリティを作成することもできます。 a possible implementation in this answerがW.Fによって提供されています。

+0

うわー、それは速かった!これが実際に来るのを見てうれしいです。さて、C++ 17の標準が早く完成することを期待しましょう。 :) – mreichelt

+1

@mreichelt FWIW、GCC、Clangは既にこの機能をサポートしています。 – chris

3

あなたが探しているものはstructured bindingsと呼ばれ、C++ 17で利用可能になります。配列の要素、特定のクラス/構造体、タプルのようなオブジェクトへの参照を作成することができます。

あなたが本当に前のC++ 17解決策を探してあなたができる最善のは、あなたが

int array[] = {1, 2, 3}; 
int a, b, c; 
std::tie(a, b, c) = std::tie(array[0], array[1], array[2]) 

のように割り当てるには、しかし、それは実際に保存されません欲しいものを参照するタプルを構築するためにstd::tieを使用しているので、あなたはずっと。