在c ++中使用向量对数字进行排序[关闭]
Posted
技术标签:
【中文标题】在c ++中使用向量对数字进行排序[关闭]【英文标题】:Sorting numbers using vector in c++ [closed] 【发布时间】:2015-07-27 03:37:28 【问题描述】:我正在尝试使用向量从最小到最大对某些数字进行排序。当我尝试运行我的代码时,它只显示 ----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;
【问题讨论】:
【参考方案1】:将vector<int> result;
更改为vector<int> result = numbers;
。
将所有vector<string>
替换为vector<int>
并在您push_back
时删除数字周围的引号
【讨论】:
它给了我错误。 21:23:错误:从 'std::vector<:basic_string>>' 转换为非标量类型 'std::vector在您的 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;
如果您不理解上述代码,请在此处阅读更多内容:
std::transform std::back_inserter Lambda expression strtol请注意,此解决方案使用 C++11 中添加的功能。
【讨论】:
【参考方案3】:问题,到处都是问题
问题 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;
【讨论】:
以上是关于在c ++中使用向量对数字进行排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章