整数のベクトルを通常の整数に変換するための事前定義された関数を探していたが、見つからない。ベクトル<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の使用
整数のベクトルを通常の整数に変換するための事前定義された関数を探していたが、見つからない。ベクトル<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の使用
:
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;
}
なぜそれを関数にラップするのか? – Samer
逆転は必要ありません。他の答えを見てください。 – PaulMcKenzie
@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());
同様の解決策は 'for_each(v.begin()、v.end()、[&](auto&d){結果=結果* 10 + d;});'です。 – Zitrax
ワンライナー:
auto rz = std::accumulate(v.begin(), v.end(), 0, [](int l, int r) {
return l * 10 + r;
});
ベクトルvに123456という要素が含まれている場合、整数iを取るとその値は直接123456でなければなりません(ライブラリの関数によっては/他の方法で)。私はpow()を使ってベクトルの各要素を抽出し、それを整数に置き換えることはしません –