2017-03-28 22 views
1

整数のベクトルを通常の整数に変換するための事前定義された関数を探していたが、見つからない。ベクトル<int>を整数に変換する

vector<int> v; 
v.push_back(1); 
v.push_back(2); 
v.push_back(3); 

これが必要:

int i=123 //directly converted from vector to int 

は、これを達成するための可能な方法はありますか? C++ 11の使用

+0

ベクトルvに123456という要素が含まれている場合、整数iを取るとその値は直接123456でなければなりません(ライブラリの関数によっては/他の方法で)。私はpow()を使ってベクトルの各要素を抽出し、それを整数に置き換えることはしません –

答えて

7

reverse(v.begin(), v.end()); 
int decimal = 1; 
int total = 0; 
for (auto& it : v) 
{ 
    total += it * decimal; 
    decimal *= 10; 
} 

EDIT:今、それは正しい方法でなければなりません。

EDIT 2:短い/簡単なものについては、DAleの答えをご覧ください。

再利用できるように関数にラップするためです。おかげで

int VectorToInt(vector<int> v) 
{ 
    reverse(v.begin(), v.end()); 
    int decimal = 1; 
    int total = 0; 
    for (auto& it : v) 
    { 
     total += it * decimal; 
     decimal *= 10; 
    } 
    return total; 
} 
+1

なぜそれを関数にラップするのか? – Samer

+2

逆転は必要ありません。他の答えを見てください。 – PaulMcKenzie

5

@Samerベクトルの要素は、数字であれば:

int result = 0; 
for (auto d : v) 
{ 
    result = result * 10 + d; 
} 

ない数字場合:std::accumulate()を使用してC++ 11と

stringstream str; 
copy(v.begin(), v.end(), ostream_iterator<int>(str, "")); 
int res = stoi(str.str()); 
+1

同様の解決策は 'for_each(v.begin()、v.end()、[&](auto&d){結果=結果* 10 + d;});'です。 – Zitrax

3

ワンライナー:

auto rz = std::accumulate(v.begin(), v.end(), 0, [](int l, int r) { 
    return l * 10 + r; 
}); 

live example

関連する問題