2017-11-14 18 views
0

が、私は私のコードで警告を解消したい警告を排除し、私はそれらの2についての答えを探しています:「ベクトル::はstdするintへ<int> :: size_type変換」

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; 
    } 

最適解?

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

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

が少しタイピングことを確認するには、次の

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

2つ目の警告を修正するには:

+0

関連性:[この回答とそのコメント](https://stackoverflow.com/a/34888054/253056) –

+0

このコードで2番目の警告メッセージがどのように生成されるかわかりません。その行には 'size_type'はありません。これは正確にあなたが持っているメッセージですか、それとも編集しましたか? – interjay

+0

編集がありません。逐語コピー – cateof

答えて

1

は、最初の警告を修正するには0

更新:ha-ha(doh!)、2番目の警告の間違い。これは、カウントの種類ではなく、iを使用することによって発生しました。

+2

'count'は' W [i]が 'と比較されている 'int'そうも' int'であるべきです。 – interjay

関連する問題