警告C4018:'<' :签名/未签名不匹配ON VECTORS [英] warning C4018: '<' : signed/unsigned mismatch ON VECTORS

查看:99
本文介绍了警告C4018:'<' :签名/未签名不匹配ON VECTORS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





当我在for循环中运行我的程序时,我收到一条警告,上面写着:



警告C4018:'<':签名/未签名不匹配





Hi,

when i run my program at the for loop i receive a warning which says:

warning C4018: '<' : signed/unsigned mismatch


void insertion_sort(vector<int> &items)
{
	cout<<" insertion_sort... ";
	int key = 0;
	int i=0;
	for( int j=2; j<items.size(); j++){//HERE
		key = items[j];
		i = j-1;
		while (i>0 && items[i]>key){
			items[i+1] = items[i];
			i=i-1;
		}
		items[i+1] = key;
	}
}





似乎我不能使用vector.size()。

将signed或unsigned int与vector.size()进行比较,vector.max_size()将不起作用。我甚至不能:





it seems like i cannot use vector.size() .
comparing a signed or unsigned int with a vector.size(), vector.max_size() won't work. i can't even:

cout<<items.size();
//or
cout<<items.max_size();
//or
signed int a = items.size();
cout<<a;
//or
unsigned int a = items.size();
cout<<a;
//or
int a = items.size();
cout<<a;











为什么会这样?

如何解决?

谢谢,






Why does it happen?
How can i fix it?
Thanks,

推荐答案

那是因为您将j声明为 int ,但 items.size()返回无符号值。将i和j声明为 unsigned int 应该让它消失。
That's because you declared j as an int, but items.size() returns an unsigned value. Declaring i and j as unsigned int should make it go away.


items.size()返回 std :: size_t ,通常是64位无符号整数,而 j 是一个签名int。编译器会警告您,因为您将 j items.size()进行比较。使 j i 无符号长整数(无符号64位整数)。

items.size() returns a std::size_t, usually a 64-bit unsigned int, and j is a signed int. The compiler warns you for that, because you compare j with items.size(). Make j and i an unsigned long (an unsigned 64-bit int).
unsigned long i=0;
for(unsigned long j=2; j<items.size(); j++){


#pragma warning ( disable : 4018 )













or


void insertion_sort(vector<int> &items)
{
	cout<<" insertion_sort... ";
	int key = 0;
	int i=0;
	for( int j=2; j<(int)items.size(); j++){//HERE
		key = items[j];
		i = j-1;
		while (i>0 && items[i]>key){
			items[i+1] = items[i];
			i=i-1;
		}
		items[i+1] = key;
	}
}</int>


这篇关于警告C4018:'&lt;' :签名/未签名不匹配ON VECTORS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆