Как превратить вектор в число и перевернуть его на языке С++? В JS это делается вот так:
let num = Number([1, 3, 4, 5].reverse().join(''))
consolt.log(num) // 5431
То есть получается именно число. А для С++? Как например и вектора
vector<int> num = {1, 3, 4, 5};
Надо получить число
int res = 5431;
Числа в исходном векторе ТОЛЬКО однозначные.
https://ideone.com/my3zsy
#include <iostream>
#include <vector>
#include <sstream>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector <int> num = {1, 3, 4, 5};
stringstream ss;
copy(num.rbegin(), num.rend(), ostream_iterator<int>(ss, ""));
int res;
ss >> res;
cout << res;
return 0;
}
Например, так :)
Вариант, работающий даже с многозначными числами:
string revs(const vector<int>&n)
{
return accumulate(n.rbegin(),n.rend(),r,
[](string r, int x) { return r += to_string(x); } );
}
Если эти многозначные числа тоже надо развернуть - ну, это труднее:
string revs(const vector<int>&n)
{
string r;
return accumulate(n.rbegin(),n.rend(),r,
[](string r, int x) {
string t = to_string(x);
reverse(t.begin(),t.end());
return r += t; } );
}
См. работающую программу здесь.
Ну, а если нужно число (хотя в заголовке вы пишете "в строку") - то можно просто применить к полученной строке stoll
.
Можно и проще, но непонятно, как именно обрабатывать многозначные числа. Если уточните, во что должен превратиться вектор, скажем, {1, 23, 45670, 5}
- то поговорим :)
Для только однозначных чисел идеален как в смысле простоты, так и производительности метод @ARHovsepyan, который я, впрочем, переписал бы в одну строку:
int revs(const vector<int>&n)
{
return accumulate(n.rbegin(),n.rend(),0,
[](int res, int x) { return res = res*10+x; } );
}
в основном из-за того, чтов таком случае он применим практически к любому контейнеру (кроме forward_list
и всех unordered
, причем к последним - просто потому, что понятие порядка у них отсутствует).
Варианты предыдущий мой и @Qwertiy нужны для многозначных чисел, но оба страдают от лишнего преобразования - у меня в строку, у @Qwertiy - в строку, поток и опять в число...
вариант с вектором:
vector<int> v{1,2,3,4,5};
int res{};
for (int i : v) {
static int k = 1;
res += i * k;
k *= 10;
}
Но в C++ есть оптимизированный для численных методов очень удобный класс valarray
Вариант с ним будет короче и быстрее:
valarray<int> v1{1,2,3,4,5};
int res = valarray<int>(v1.apply([](int i)
{ static int k = 1; i *= k; k*= 10; return i;})).sum();
Если в последовательности числа многозначны, то вариант не вмещать в int конкентацию более двух чисел, резко возрастает, поэтому я предложил только варианты для однозначных чисел
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется верхнее меню, в виде нескольких пунктов, где несколько пунктов меню представляют из себя кнопки, без вложенных пунктовПолный код...
Учусь писать на С++, и переодически, пройдя какую-то тему, приходится просто оставлять её в голове без практикиВ силу нехватки воображения,...
Начнём с того, что я ещё совсем "зелёный" в программированииИ тут на днях я баловался с С++
Похоже я не совсем понимаю что из себя представляют двумерные (n-мерные) массивы в C++, чем они являются для оперативной памяти и чем двумерный...