gpt4 book ai didi

c++ - vector push_back零成空 vector

转载 作者:行者123 更新时间:2023-12-02 09:51:15 24 4
gpt4 key购买 nike

我遇到了我不知道的std::vector的以下属性,我想知道是否有人可以为我澄清它。

我认为这段代码:

int main()
{
int i = 5;
vector<int> vector;
while(i > 0){
vector.push_back(i);
--i;
}
}

应该产生一个包含以下元素的 vector :
5, 4, 3, 2, 1

但是,当我在上面运行代码时,得到的是:
5, 4, 3, 2, 0

为了探究正在发生的事情,我在每个阶段打印了 vector ,然后得到以下序列:
  • i = 5- vector (0)
  • i = 4-vector(5,0)
  • i = 3- vector (5,4,0)
  • i = 2- vector (5,4,3,0)
  • i = 1- vector (5,4,3,2,0)

  • 因此,我认为以某种方式在第一个周期(应该为5)中将一个push_backed归零,这很奇怪。如果尝试更大的值(例如n = 10),则每个时间周期都会修改最后一个元素。

    我不知道怎么回事。我的猜测是,缓冲区中可能有一些东西会在5点之前被推回,然后这会使推回和循环异相。或者是别的什么?

    编辑:

    因此,正如人们在注释中所指出或暗示的那样,该错误出在我使用的打印例程中。记录为:
    void print_vector(std::vector<int> vector){
    cout << string(10, '-') << endl;
    cout << "(";
    for(int i=0; i < vector.size() - 1; ++i){
    cout << vector[i] << ", ";
    }
    cout << vector[vector.size()];
    cout << ")" << endl;

    }

    错误来自 vector[vector.size()],当 vector 没有我猜到的元素时,它会做奇怪的事情。

    最佳答案

    是的,您的错误确实在打印代码中。的

    vector[vector.size()]

    在C++中,表达式是非法的。 vector 包含范围[0; vector.size()),表达式将尝试访问不存在的表达式。 vector 的最后一个元素,这是未定义的行为。

    关于c++ - vector push_back零成空 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26614070/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com