Изменение вектора по ссылке не сохраняется

Я пытаюсь реализовать алгоритм сортировки, в котором вектор передается в функцию и изменяется. Однако при печати изменения не сохраняются. Не обращайте внимания на тот факт, что полная версия simpleSort не реализована (цель - реализовать quickSort). Вопрос связан с поведением вектора. Вот некоторые ресурсы, которые я изучил: Передача векторов по ссылке Передача вектора по ссылке Передача вектора по ссылке на функцию, но изменение не сохраняется

Я думаю, что делаю то, что они говорят, но мне не хватает чего-то фундаментального. Ниже приведен пример кода:

#include "stdafx.h"
#include <iostream>
#include <vector>

void simpleSort(std::vector<float>& theta , int);
void printArray(std::vector<float> & arr, int size)

int main()
{
    std::vector<float> theta;
    theta.push_back(10);
    theta.push_back(-5);
    theta.push_back(-3);

    simpleSort(theta, theta.size()-1);
    printf("Sorted array: \n");
    printArray(theta, theta.size());
    system("pause");

    return 0;
}

void simpleSort(std::vector<float>& theta, int n)
{
    for (int i = 0; i < n ; ++i)
    {
        if (theta[i] < theta[i + 1]) std::swap(theta[i], theta[i + 1]);
    }
}

void printArray(std::vector<float> & arr, int size)
{
    int i;
    for (i = 0; i < size; i++)
        printf("%d ", arr[i]);
    printf("\n");
}

Как видно, введены значения {10, -5, -3}. Когда я печатаю результат в main, я получаю {0, 0, 0}. Но если я напечатаю вектор в самой функции, я получу {-5, -3, 10}.

Я думал, что правильно передаю вектор по ссылке, используя «&», но я думаю, что это не так.


person Victor    schedule 26.12.2014    source источник


Ответы (1)


Единственная проблема, с которой вы столкнулись, - это ваш printArray. Вы используете "% d", но ваш вектор является плавающим, поэтому вам нужен% f.

person Daniel    schedule 26.12.2014
comment
Ты спаситель! Я был настолько сосредоточен на векторной части, что никогда не подвергал сомнению печатную часть. Я решил, что все еще использую целые числа в своем тестировании. - person Victor; 27.12.2014