关于vector的size()问题,奇怪了.

snfdf 2014-11-24 10:56:50
int start=kxdata.size()-1>1?kxdata.size()-1:1;
return(start);
kxdata是个vector,按理说返回的start应该不小于1才对,但实际调用的时候发现第一次返回的start竟然是-1,但如果把上面一句改成:
int start=kxdata.size()>2?kxdata.size()-1:1;
则一切正常,这是怎么个情况?还请高手解答,谢谢.
...全文
977 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小布 2014-11-25
  • 打赏
  • 举报
回复
 string::size_type从本质上来说,是一个整型数。关键是由于机器的环境,它的长度有可能不同。 例如:我们在使用 string::find的函数的时候,它返回的类型就是 string::size_type类型。而当find找不到所要找的字符的时候,它返回的是 npos的值,这个值是与size_type相关的。假如,你是用 string s; int rc = s.find(.....); 然后判断,if ( rc == string::npos ) 这样在不同的机器平台上表现就不一样了。如果,你的平台的string::size_type的长度正好和int相匹配,那么这个判断会侥幸正确。但换成另外的平台,有可能 string::size_type的类型是64位长度的,那么判断就完全不正确了。 所以,正确的应该是: string::size_type rc = s.find(.....); 这个时候使用 if ( rc == string::npos )就回正确了。
小布 2014-11-25
  • 打赏
  • 举报
回复
请用size_type。
mymtom 2014-11-25
  • 打赏
  • 举报
回复
符号比较问题。
ri_aje 2014-11-25
  • 打赏
  • 举报
回复 1
这句有毛问题

kxdata.size()-1?
vector::size 返回 size_type 是个无符号整形值,-1 以后得到的还是无符号,如果 size == 0,则溢出会导致最大的无符号整形,导致判断失败。
iyomumx 2014-11-24
  • 打赏
  • 举报
回复
因为size()返回无符号整数
snfdf 2014-11-24
  • 打赏
  • 举报
回复
是个struct的vector,一开始没有任何值,所以没有初始化.我之所以在这里return(start),就是为了调试,因为在我调用它的时候提示我下标越界,后来才发现start的值是-1.在这句之后我才开始给vector添加元素,然后开始循环判断vector里的内容,但是因为start的值是-1,所以才报的错.我想知道为什么kxdata.size()-1>1判断就不对而kxdata.size()>2就可以.
天半子 2014-11-24
  • 打赏
  • 举报
回复
你那个kxdata是怎样的vector〈〉,怎样初始化的?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧