错误:使用向量时,< =的右操作数有错误的类型

时间:2015-04-26 21:25:32

标签: c++

我想让程序知道有史以来最小的数字和最大的数字 有史以来的数字。这是代码:

#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>          ]     

我尝试修复它,但我不知道是什么问题。

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