Ошибка vector subscript out of range

Рейтинг: -1Ответов: 1Опубликовано: 08.03.2023

Вообщем, я занимаюсь по книге Страуструпа и у меня не получается сделать довольно простое задание.

  1. Напишите две функции, обращающие порядок следования элементов в объекте типа vector. Например, вектор 1 , 3, 5, 7, 9 становится вектором 9, 7, 5, 3, 1 . Первая функция, изменяющая порядок следования элементов на противоположный, должна создавать новый объект класса vector, а исходный объект класса vector должен оставаться неизменным . Другая функция должна изменять порядок следования элементов в передаваемом ей векторе без использования других векторов. Указан11е: воспользуйтесь функцией swap.
#include <iostream>
#include <vector>

//создает новый вектор new vector swap
std::vector<int> nv_swap(std::vector<int>& nv, const std::vector<int> ov)
{
    nv.reserve(ov.size());

    int j = ov.size();

    for (int i : ov)
    {
        nv[j] = i;
        --j;

    }
    return nv;
}

//преобразует старый вектор old vector swap
void ov_swap(std::vector<int>& v)
{

}



int main()
{
    const std::vector<int> ov{ 1 , 3, 5, 7, 9 };
    std::vector<int> nv;
    nv_swap(nv, ov);

    /*std::cout << nv[1];*/
}

Ответы

▲ 2

Ну, раз вы работаете с конкретно vector<int>, то...

#include <vector>
#include <iostream>

using namespace std;

void inPlaceReverse(vector<int>& v)
{
    for(size_t i = 0, j = v.size()-1; i < j; ++i, --j)
    {
        int t = v[i]; v[i] = v[j]; v[j] = t;
        // Или короче — swap(v[i],v[j]);
}

vector<int> newReverse(const vector<int>& v)
{
    vector<int> cp(v);
    inPlaceReverse(cp);
    return cp;
}

int main(int argc, char * argv[])
{
    vector<int> src{1,3,5,7,9};
    for(auto i: newReverse(src)) cout << i << " "; cout << endl;
    inPlaceReverse(src);
    for(auto i: src) cout << i << " "; cout << endl;
}

Или нужно с шаблонами/итераторами?

Конечно, можно написать копирование вектора в обратном порядке во второй функции... Но мне кажется, в этом нет никакого смысла: проще скопировать и развернуть скопированный вектор.