LINUX.ORG.RU

Можно ли так реализовать Reverse функцию?

 , ,


0

1

Сильно не бейте, нужен один параметр

 #include <iostream>
#include <vector>

void Reverse(std::vector<int>& v){
  for(unsigned int i = 0; i <= v.size(); ++i)
    v.push_back(v[i]);
}

int main(){
  std::vector<int> v = {1, 4, 5, 3};

  Reverse(v);
  for(auto x : v)
    std::cout << x;
}
ps. не работает

std::reverse(std::begin(v), std::end(v));

fsb4000 ★★★★★
()

Примеры кода из последнего можно посмотреть тут

Зачем реверсить вектор, если его можно просто проходить от конца к началу? Причём даже код менять не надо - нужен просто реверсный итератор.

no-such-file ★★★★★
()
void Reverse(std::vector<int>& v){
  for(unsigned int i = 0; i <= v.size(); ++i)
    v.push_back(v[i]);
}

Попытайся детально расписать каждый шаг, тогда поймешь свою ошибку. Очень важно научиться самому исправлять свои косяки, только так сможешь чему-то научиться.

anonymous
()

один: все уже сказали

два: не смотртя на то что не подумали что делает предложение v.push_back(v[i]), но раз уж хотите так написать, то почему бы не прочитать внимательнее ваш предыдущий топик и не использовать итераторы вместо for(unsigned int i...

тем более, что далее в коде сами же пишете for(auto x : v)...

samson ★★
()
Последнее исправление: samson (всего исправлений: 1)
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>

void Reverse(std::vector<int>& v) {
  std::reverse(std::begin(v), std::end(v));
}

int main(){
  std::vector<int> v = {1, 4, 5, 3};
  Reverse(v);
  std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
}
Bahamut
()
Ответ на: комментарий от Bahamut

Или так:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>

int main() {
  std::vector<int> v = {1, 4, 5, 3};
  std::reverse_copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, ", "));
}

Bahamut
()

Тут написали как решить задачу, но я подозреваю, что решаешь задачу в учебных целях и ты хочешь понять, что ты делаешь не так.
Так вот, в прошлой теме я тебе уже писал

i <= v.size()

Это неправильное условие, чтобы понять почему рекомендую почитать про вектор, как его реализуют, тогда станет понятно что такое индексы и почему делать i <= v.size() неправильно.
Но в этом коде до этой ошибки дело не доходит. Всё потому, что v.push_back(v[i ]); в цикле даёт бесконечный цикл.
В общем я рекомендую прочесть хотя бы одну книгу по плюсам, например эту. А ещё лучше начать с си и прочесть, например эту.

flyshoot
()

Ты просто бесконечно добавляешь в конец вектора его копию. Без разворота. Пройдись по половине вектора вызывая std::swap(v[i], v[len - 1 - i])

khrundel ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.