2017-07-06 56 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,到目前爲止好。但是我想知道是否有更優雅的語法來同時從數組中聲明多個變量。例如(只是一個想法,不編譯):

int [a, b, c] = array; 

在C++或新的標準之一是否有這樣的功能?我不能是唯一一個看着它的人​​。

或者:您最優雅的方式是從一個數組中同時設置多個變量?

+0

我認爲這將是很好的告訴我們更多你想要做什麼這些變量或你在做什麼之後 –

+2

正如你指定的c + + 11,我會看看'std: :tie' –

+1

有沒有理由不能直接使用數組?數組是否真的是最適合您的實際問題的結構?數組旨在用於項目列表。如果數據是相關數據的集合,'class'或'struct'更合適。 –

回答

6

在C++ 17可以使用structured bindings - 它們的語法非常相似,您已發佈的內容:

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的解決方案真的是你能做的最好是使用std::tie構建一個指的是你要指派像

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

元組是什麼,但真的不救你很多。