【问题标题】:Why does the vector behave like this [duplicate]为什么向量的行为是这样的[重复]
【发布时间】:2023-02-13 20:49:12
【问题描述】:

我写了以下代码:

int main() {
    int b=0;
    vector<int> v(5,-1);
    v[b]=b++;
    cout<<b<<"\n";
    cout<<v[b]<<"\n";
}

输出如下:

1

-1 0 -1 -1 -1

我知道在下面的代码中 v[1] 变为 0 但我不明白为什么 v[0] 不变为 0,它与代码执行流程有关吗?

【问题讨论】:

  • 像这样使用增量运算符会导致未定义的行为。更多关于here。结果可能因编译器而异,因为不存在以这种方式使用递增的明确规则。
  • en.cppreference.com/w/cpp/language/eval_order:4)内置后递增和后递减运算符的值计算在其副作用之前排序。
  • @BRemmelzwaal 我认为在这种情况下是另外一回事。这段代码中没有多个 ++ 和 -- 。
  • 您的代码没有 for 循环,因此无法产生“如下输出”。
  • v[b]=b++; 分配给向量的 1 个元素。如果你理解它分配给v[1],为什么要修改第二个元素?

标签: c++ algorithm data-structures


【解决方案1】:

v[b]=b++ 中,您使用后增量,这意味着 b 上的增量将在 v[b]=b 之后发生,其中 b 仍然是 0

【讨论】:

  • 这是不正确的。自 C++17 起,b=0; v[b]=b++; 被定义为分配 v[1]=0;(和 b=1)。尽管如此,它仍然是糟糕的代码,可以说。
猜你喜欢
  • 2020-06-01
  • 2011-12-31
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多