我想让程序知道有史以来最小的数字和最大的数字 有史以来的数字。这是代码:
#include<iostream>;
#include<vector>:
#include<algorithm>
using namespace std;
int main(){
vector<double>number;
double x;
while (cin >> x){
number[0] =x ;
number.push_back(x);
}
for (int y=0; y <= number.size; y++){
sort(number.begin(), number.end());
if (number[y] >= number[0]){
cout << "the largest so far\n";
}
else if (number[y] >= number[number.size()/2]){
cout << "the smalest so far \n";
}
else{
cout << x;
}
}
}
每次运行代码时都会显示以下错误:
error C2297: '<=' : illegal, right operand has type 'unsigned int
(__thiscall std::vector<double,std::allocator<_Ty>>::* )(void) throw() const'
1> with
1> [
1> _Ty=double
1> ]
我尝试修复它,但我不知道是什么问题。
答案 0 :(得分:0)
错误告诉您,运算符<=
的右操作数应为unsigned int
。
这意味着您遇到了number.size
的问题。实际上,size()
是类vector
的成员函数,因此应该写成如下:number.size()
for (int y=0; y < number.size; y++) {/*...*/}
另请注意,vector
的索引从0
开始,然后转到size() - 1
。因此,您应该使用<
而不是<=
其他一些评论:
如果您想对vector
进行排序,可以在for
循环之外进行排序,因为一旦足够,您就不会在循环外修改向量。
关于你的算法本身,我不确定你想要实现什么样的输出。但是,由于您的矢量将被排序,最小的数字将是number[0]
,最大的number[number.size()-1]
另请注意,您有一些algorithm
功能可以帮助您实现目标,甚至无需对矢量进行排序:std::min_element
&amp; std::max_element