Как изменить вектор С++?

Есть ли встроенная векторная функция в С++ для изменения вектора на месте?

Или вам просто нужно сделать это вручную?

Ответ 1

Для этой цели в заголовке algorithm есть функция std::reverse.

#include <vector>
#include <algorithm>

int main() {
  std::vector<int> a;
  std::reverse(a.begin(), a.end());
  return 0;
}

Ответ 2

Все контейнеры предлагают обратный просмотр их содержимого с rbegin() и rend(). Эти две функции возвращают так называемые обратные итераторы, которые можно использовать как обычные, но это будет выглядеть так, как будто контейнер фактически отменен.

#include <vector>
#include <iostream>

template<class InIt>
void print_range(InIt first, InIt last, char const* delim = "\n"){
  --last;
  for(; first != last; ++first){
    std::cout << *first << delim;
  }
  std::cout << *first;
}

int main(){
  int a[] = { 1, 2, 3, 4, 5 };
  std::vector<int> v(a, a+5);
  print_range(v.begin(), v.end(), "->");
  std::cout << "\n=============\n";
  print_range(v.rbegin(), v.rend(), "<-");
}

Живой пример на Ideone. Выход:

1->2->3->4->5
=============
5<-4<-3<-2<-1

Ответ 3

Вы можете использовать std::reverse, как этот

std::reverse(str.begin(), str.end());

Ответ 4

Вы также можете использовать std::list вместо std::vector. list имеет встроенную функцию list:: reverse для изменения элементов.

Ответ 5

Вы можете использовать эту логику, если вы не хотите использовать встроенный метод reverse():

vector<string>::iterator itr;
vector<string>::iterator it;
for (itr = v.begin(), it = v.end()-1; itr!=v.end(), \
     it!=(v.begin()+(v.size()-1)/2); \
     ++itr, --it)
{
     string temp;
     temp = *itr;
     *itr = *it;
     *it = temp; 
}