下面的代码在第174行给出了以下警告:
警告C4244:'初始化':从'__int64'转换为'int',可能导致数据丢失
但我真的不明白为什么。我有s
的向量__int64
,但我的大小是整数,k
也是整数,所以一切都应该没问题。或者k:s
可能与我想的不同?
#define _USE_MATH_DEFINES
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
__int64 count( vector<__int64> s, int n )
{
vector<__int64> table(n+1,0); // or: 0LL instead 0
table[0] = 1; // or: 1LL instead 1
for ( int k : s ) /* 174 */ // or: for ( auto& k : s )`
for(int j=k; j<=n; ++j)
table[j] += table[j-k];
return table[n];
}
int main()
{
// some code here
cin.get();
return 0;
}
答案 0 :(得分:2)
for ( int k : s )
遍历s
的所有元素,s
的模板类型为__int64
,因此k
的类型需要__int64
1}}
请参阅:http://www.cprogramming.com/c++11/c++11-ranged-for-loop.html
答案 1 :(得分:2)
将for ( int k : s )
更改为for ( auto& k : s )
,一切都会好的。