2016-11-18 6 views
0

У меня возникла проблема с кодированием о «простом» упражнении о сортировке того, что находится внутри вектора числа n целых чисел. Проблема в том, что компилятор не принимает void как тип для сортировки функции (и это должна быть функция void). Но я действительно не понимаю, почему. Для переменных тип соответствует (указатель < -> v.begin(), например), но для fucntion это не так. Любая помощь ценится! Вот мой код:Ошибка о функции void с векторным аргументом

#include <iostream> 
#include <vector> 

typedef std::vector<int>::iterator Vit; 


void sort(Vit begin, Vit end){ 
    int len = end - begin; 
    for(begin; begin < end; ++begin){ 
     for(int i = 1; i < len; ++i){ 
      if(*begin < *(begin +i)){ 
       *begin = *(begin + i); 
      } 
     } 
    } 
    std::cout<< "* "; 
    for(begin; begin < end; ++begin){ 
     std::cout<< *begin<< " "; 
    } 
    std::cout<< "*"; 
    return; 
} 



int main(){ 
    int n; 
    std::cin >> n; 
    std::vector<int> v(n); 
    for(Vit it = v.begin();it != v.end(); ++it){ 
     std::cin >> *it; 
    } 

    void sort (v.begin() , v.end()); 

} 
+4

В основном, изменить 'недействительным вид (v.begin(), v.end());' 'для сортировки (v.begin(), v.end()); '. –

+0

Правильно! Большое спасибо, это действительно глупая ошибка ... Не могли бы вы также объяснить мне, почему код не работает? Он должен сортировать элементы внутри вектора. –

+0

Похоже, вам, возможно, потребуется научиться использовать отладчик для выполнения кода. С хорошим отладчиком вы можете выполнить свою программу по очереди и посмотреть, где она отклоняется от ожидаемого. Это важный инструмент, если вы собираетесь заниматься программированием. Дальнейшее чтение: ** [Как отлаживать небольшие программы] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

ответ

0

Есть несколько ошибок. Вы увеличиваете начало в первом цикле, но никогда не перезагружаете его. Таким образом, второй цикл цикла никогда не будет введен. Каждый ++ начинает менять позицию вашего итератора! Цикл для (int i = 1; i < len; ++ i) переместится в текущую позицию begin plus i и, таким образом, покинет память. Следующие должны делать то, что вы хотите:

#include <iostream> 
#include <vector> 

typedef std::vector<int>::iterator Vit; 

void sort(Vit begin, Vit end){ 
    for(Vit pos1=begin; pos1 < end; ++pos1) { 
    for(Vit pos2=pos1+1; pos2 < end; ++pos2) { 
     if(*pos1 < *pos2) { 
    int swap = *pos1; 
    *pos1 = *pos2; 
    *pos2 = swap; 
     } 
    } 
    } 
    std::cout<< "* "; 
    for(Vit it=begin; it < end; ++it){ 
    std::cout<< *it<< " "; 
    } 
    std::cout<< "*"; 
    return; 
} 

int main(){ 
    int n; 
    std::cin >> n; 
    std::vector<int> v(n); 
    for(Vit it = v.begin(); it < v.end(); ++it){ 
    std::cin >> *it; 
    } 

    sort (v.begin() , v.end()); 
} 
+0

Спасибо большое! Эта часть кода при обмене была действительно полезна. Он не заполнил запросы execrcise, но мне удалось понять, чего не хватает, и я исправил код, очень большое спасибо! –

 Смежные вопросы

  • Нет связанных вопросов^_^