我的For循环有什么问题?我收到警告:有符号和无符号整数表达式之间的比较[-Wsign-compare]

cod*_*441 10 c++

#include <iostream>
#include <string>
#include <vector>
#include <sstream>


using namespace std;

int main() {

    vector<double> vector_double;
    vector<string> vector_string;
    ...


    while (cin >> sample_string)
        {
            ...
        }

    for(int i = 0; i <= vector_string.size(); i++)
        {
            ....
        }

    for (int i = 0; i < vector_double.size(); i++)
        ....


    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_* M. 15

为什么会有警告-Wsign-compare

作为警告的名称及其文本暗示,问题在于您正在比较有符号和无符号整数.通常认为这是一次事故.

为了避免这种警告,您只需要确保<(或任何其他比较运算符)的两个操作数都是有符号的或两者都是无符号的.

我怎么能做得更好?

写的惯用方式for环路初始化两个计数器,并在第一条语句的限制:

for (std::size_t i = 0, max = vec.size(); i != max; ++i)
Run Code Online (Sandbox Code Playgroud)

这样可以节省size()每次迭代时的重新计算.

您也可以(也可能应该)使用迭代器而不是索引:

for (auto it = vec.begin(), end = vec.end(); it != end; ++it)
Run Code Online (Sandbox Code Playgroud)

auto这是一个简写std::vector<int>::iterator.迭代器适用于任何类型的容器,而索引限制你使用C-arrays,dequevector.


inf*_*inf 7

这是因为vector类中的.size()函数不是int类型,而是vector :: size_type类型

使用那个或auto i = 0u消息应该消失.