вектор целых чисел

Я хотел бы преобразовать вектор в целое число. Я могу вывести вектор, используя

vector <int> iV;

iV.push_back(3);
iV.push_back(8);
iV.push_back(6);

copy(iV.begin(),iV.end(),ostream_iterator<int>(cout,""))

Но как я могу получить это в int?

РЕДАКТИРОВАТЬ: Использование stringstream отлично подходит для того, что я делаю. Я действительно хотел увидеть, как именно это выглядит через cout. Я не хотел точного int от int, я имел в виду один единственный int, поэтому для моего примера это будет int, равный 386. Спасибо всем за помощь, очень ценю это.


person Acebond    schedule 09.10.2011    source источник
comment
Что вы ожидаете от int в этом случае?   -  person Ignacio Vazquez-Abrams    schedule 09.10.2011
comment
@IgnacioVazquez-Abrams то же самое, что он видит через cout?   -  person Muhammad Hasan Khan    schedule 09.10.2011
comment
@Acebond: Вы имеете в виду, что хотите извлечь значения int с помощью int? это оно?   -  person Roee Gavirel    schedule 09.10.2011


Ответы (3)


Запишите его в stringstream, а затем прочитайте из него так:

std::stringstream strStream;
copy(iV.begin(),iV.end(),ostream_iterator<int>(strStream,""));
int myInt;
strStream >> myInt;
person Muhammad Hasan Khan    schedule 09.10.2011
comment
Огромное спасибо. Прекрасно работает и эпическое время отклика. - person Acebond; 09.10.2011
comment
Это не очень эффективно. Зачем идти через строку? - person Steve; 09.10.2011
comment
@Hasan Khan: Здравый смысл подсказывает, что когда так же легко (или даже проще) делать что-то эффективно, вы должны это делать. По крайней мере, было бы неплохо сделать оговорку. - person Steve; 09.10.2011
comment
@Hasan Khan: я не хотел вас обидеть, когда сказал, что ваш код неэффективен. Что касается удобочитаемости и ремонтопригодности, то, что включает в себя итерацию, умножение на 10 и сложение, превосходит ostringstreams в любой день. - person Steve; 09.10.2011

Я не уверен, что вы это имеете в виду, но вы могли бы сделать:

int * ip = &iv[0];

а затем получить доступ к ip[0], ip[1] и т. д.

person Itamar Katz    schedule 09.10.2011

Попробуйте что-то вроде этого:

int total = 0;
for(vector<int>::const_iterator i = iV.begin(); i != iV.end(); ++i)
    total = total*10 + *i;
person Steve    schedule 09.10.2011
comment
Конечно, это, вероятно, работает только для однозначных целых чисел. - person Peter; 09.10.2011
comment
@Питер: Да. Я подсознательно предположил, что вектор содержит цифры. - person Steve; 09.10.2011
comment
То, на что вам нужно умножить, может быть вычислено примерно так: n > 0 ? std::pow(10, int(std::log10(n) + 1)) : 10 (ideone.com/9efpn) - person UncleBens; 09.10.2011
comment
Спасибо, Стив, это казалось бы более эффективным. - person Acebond; 10.10.2011