【问题标题】:How do I access the elements of a vector correctly?如何正确访问向量的元素?
【发布时间】:2012-08-08 18:24:07
【问题描述】:
int main() {

    vector <int> multiples(1);

    cout << multiples[0];

}

当我希望它为 1 时返回 0。当我用一个元素初始化向量时会发生这种情况,但是我可以访问第二个元素:

int main() {

    vector <int> multiples(1, 4);

    cout << multiples[1]; // 4

}

此外,当我尝试访问向量中不存在的元素时,我会得到最右边元素的值(在本例中为 4)。但是我似乎无法获得第一个元素。谁能解释一下为什么?

【问题讨论】:

  • 1是它有多少个元素,不是索引的位置,索引位置还是从0开始,像数组一样。
  • 请参阅此问题以获得对您尝试使用的概念的未来支持:stackoverflow.com/questions/2409819/…

标签: c++


【解决方案1】:

其实你不需要指定向量的大小。 您可以在需要时添加元素(具体的对象),这是矢量的主要优点和用途。向向量中添加元素可以通过以下方式轻松完成:

multiples.push_back(1);
multiples.push_back(4);

希望对你有帮助。

【讨论】:

    【解决方案2】:

    这个

    vector <int> multiples(1);
    

    创建一个大小为 1 的 int 向量。单个元素是 已初始化的值,对于ìnt,这意味着零初始化。所以你得到一个带有一个条目的向量,其值为0。还有这个

    vector <int> multiples(1, 4);
    

    创建一个大小为 1 的向量,这次使用 value4。如果您尝试访问 multiplies[1],您将超出 size-1 向量的范围,从而调用未定义的行为。如果您想用值14 的两个元素初始化一个向量,在 C++11 中您可以这样做:

    vector <int> multiples{1, 4};
    

    【讨论】:

    • 有没有办法在制作指定尺寸的同时做multiples{1, 4}
    • @David multiples{1, 4} 使其大小为 2,即元素的数量。您可以根据需要添加任意数量,例如multiples{1,2,3,4,5}
    【解决方案3】:

    看看这段代码。你应该看到问题。您没有按照预期的方式初始化向量。

    int main()
    {
        vector <int> multiples(2); // create a vector of size two with default value of 0.
        multiples[0] = 10; // set element at index 0 = 10
        multiples[1] = 20; // set element at index 0 = 10
        cout << multiples[0]; // 10
        cout << multiples[1]; // 20
    }
    

    【讨论】:

      【解决方案4】:
      int main() {
      
          vector <int> multiples(1);
      
          cout << multiples[0];
      
      }
      

      http://cplusplus.com/reference/stl/vector/vector/

      使用 1 个 int 元素创建向量,默认初始化(即 int() == 0)。

      vector <int> multiples(1, 4);
      

      用 4 初始化的 1 个 int 元素创建向量。

      cout << multiples[1]; // 4
      

      这是不正确的,因为向量中只有一个元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-07
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 2014-03-05
        • 2019-09-22
        • 1970-01-01
        相关资源
        最近更新 更多