2015-07-27 4 views
-4

Im пытается сортировать определенные числа от наименьшего до наибольшего с помощью vector.When я пытаюсь запустить мой код, он отображает только ---- PRINT ----- и --- END --- Im застрял. Im думает, что это имеет какое-то отношение к функции fix во время процесса сортировки.Сортировка чисел с использованием вектора в C++

#include <vector> 
#include <iostream> 
#include <algorithm> 

using namespace std; 

void print(vector<int> vec) 
{ 
    cout<< "------PRINT---------"<< endl; 
    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
    cout << *it << " "; 

    cout << "------ END ------" << endl; 
} 
    vector<int> fix(vector<string> numbers) 
{ 
      vector<int> result; 
      sort(result.begin(), result.end()); 
      return result; 
    } 

int main() 
{ 

vector<string> test; 

test.push_back("5462"); 
test.push_back("5451"); 
test.push_back("7854"); 
test.push_back("221"); 


print(fix(test)); 

return 0; 
} 

ответ

1

Изменение vector<int> result; в vector<int> result = numbers;.

Заменить все vector<string> на vector<int> и удалить кавычки вокруг цифр, когда вы push_back их

+0

Это дает мне ошибку. 21:23: ошибка: преобразование из 'std :: vector >' в нескалярный тип 'std :: vector ' запрошен – IamAndroida

+0

Он работает. Благодаря! – IamAndroida

-1

Проблемы, проблемы везде

Задача 1.

vector<int> fix(vector<string> numbers) 
 
{ 
 
      vector<int> result; <--- what is this? 
 
      sort(result.begin(), result.end()); <-- sort what? 
 
      return result; 
 
    }

Задача 2.

vector<int> fix(vector<string> numbers) 
 

 
{ 
 
     // You wanna make vector<string> become vector<int> directly? nope 
 
     // You have to convert yourself 
 
     // or use something like result.push_back(atoi(numbers[i].c_str())) 
 
      vector<int> result; 
 
      sort(result.begin(), result.end()); 
 
      return result; 
 
    }

Задача 3.

void print(vector<int> vec) 
 
{ 
 
    cout<< "------PRINT---------"<< endl; 
 
    // I seldom see people use iterator on vector<>... but it's ok 
 
    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
 
    cout << *it << " "; 
 
    
 
    // Missing cout << endl; alert 
 
    cout << "------ END ------" << endl; 
 
}

В заключение, рабочая версия:

#include <vector> 
 
#include <iostream> 
 
#include <algorithm> 
 

 
using namespace std; 
 

 
void print(vector<int> vec) 
 
{ 
 
    cout<< "------PRINT---------"<< endl; 
 
    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
 
    cout << *it << " "; 
 
\t 
 
    cout << endl << "------ END ------" << endl; 
 
} 
 
    vector<int> fix(vector<string> numbers) 
 
{ 
 
      vector<int> result; 
 
      for(int i=0, l =numbers.size(); i<l; i++) result.push_back(atoi(numbers[i].c_str())); 
 
      sort(result.begin(), result.end()); 
 
      return result; 
 
    } 
 

 
int main() 
 
{ 
 

 
vector<string> test; 
 

 
test.push_back("5462"); 
 
test.push_back("5451"); 
 
test.push_back("7854"); 
 
test.push_back("221"); 
 

 

 
print(fix(test)); 
 

 
return 0; 
 
}

0

В вашей fix функции, вы сортировки result который является пустым вектором. Это приводит к другой проблеме, что у вас есть несоответствие основного типа, требующее преобразования.

Если вы хотите, чтобы результат был vector<int>, сначала необходимо преобразовать строки в целые числа. Попробуйте это:

vector<int> fix(vector<string> numbers) 
{ 
    vector<int> result; 
    result.reserve(numbers.size()); 
    std::transform(numbers.begin(), numbers.end(), std::back_inserter(result), 
     [](const string & s) { return strtol(s.c_str(), NULL, 10); }); 
    sort(result.begin(), result.end()); 
    return result; 
} 

Подробнее здесь, если вы не понимаете, приведенный выше код:

Обратите внимание, что это решение использует функции, добавленные в C++ 11.

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