我试图使用vector将某些数字从最小到最大排序。当我尝试运行我的代码时,它只显示---- PRINT -----和--- END --- 我卡住了。我想在分拣过程中是否与修复功能有关。
#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;
}
答案 0 :(得分:1)
将vector<int> result;
更改为vector<int> result = numbers;
。
将所有vector<string>
替换为vector<int>
,并在push_back
答案 1 :(得分: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中添加的功能。
答案 2 :(得分:-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 << " ";
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;
}