消除“转换为std :: vector <int> :: size_type to int”警告

时间:2017-11-14 13:52:59

标签: c++ c++11

我想在我的代码中消除警告,我正在寻找关于这两个问题的答案:

1.   warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for( auto i = 0; i < w.size(); i++ ) {

2. warning: conversion to ‘std::vector<int>::size_type {aka long unsigned int}’ from ‘int’ may change the sign of the result [-Wsign-conversion]
         for ( int count = 0; count < w[i]; count++ )

源代码如下。使用一些随机数返回一个int的向量。

 for( auto i = 0; i < w.size(); i++ ) {
     std::vector<int> random(std::vector<int>& w){


        std::vector<int> v;
        v.clear();

        std::random_device device;
        std::mt19937 generator(device());

        for( auto i = 0; i < w.size(); i++ ) {

            for ( int count = 0; count < w[i]; count++ )
                v.push_back(i);
        }

        std::shuffle(v.begin(), v.end(), generator);

        return v;
    }

最佳解决方案?

1 个答案:

答案 0 :(得分:1)

修复第一个警告:

for( std::vector<int>::size_type i = 0; i < w.size(); i++ ) {

修复第二个警告:

for ( std::vector<int>::size_type count = 0; count < w[i]; count++ )

<击>

为了减少打字:

using index_t = std::vector<int>::size_type;

更新:ha-ha(doh!),我对第二次警告的错误。它是由于使用i而不是按计数类型引起的。