【问题标题】:Why vector.size()-1 gives garbage value? [duplicate]为什么 vector.size()-1 给出垃圾值? [复制]
【发布时间】:2018-02-06 15:29:30
【问题描述】:

我曾尝试运行此代码

// vector::size
#include <iostream>
#include <vector>

int main ()
{
   std::vector<int> myints;
   std::cout << "size: " << myints.size() << '\n';
   std::cout << "size: " << myints.size()-1 << '\n';

 return 0; 
}

出乎意料的是输出来了

0

垃圾价值

应该是

0

-1

这里是:code

【问题讨论】:

  • 看类型。
  • 我严重怀疑您的程序是否真的输出“垃圾值”。
  • 不应该。它是无符号类型,没有负值。
  • @molbdnilo:这是个好问题。我需要检查,但我认为 cout 的行为是为超过一定大小的unsigned 类型定义的实现。似乎理论上,标准允许“垃圾值”。
  • @Bathsheba,据我所知,operator&lt;&lt;num_put::do_put,具有默认其他设置的 unsigned long long 将以与调用 printf("%ull", val) 相同的方式输出,同样对于其他基本的无符号类型。我不太确定 size_t 是否会出现潜在问题,因为它要么适合过载,要么会导致歧义。

标签: c++ debugging vector issue-tracking


【解决方案1】:

myints.size() 是一个 unsigned 类型:正式为 std::vector&lt;int&gt;::size_type。从值为 0 的无符号类型中减去 1 将导致环绕效果,在您的情况下,到

std::numeric_limits<std::vector<int>::size_type>::max()

不会打印“垃圾值”:但上面的数字,将是 2 的大幂次方的 1。

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 2021-02-20
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多