【问题标题】:How to access the vector of vector element in C++?如何在 C++ 中访问向量元素的向量?
【发布时间】:2021-12-28 02:44:31
【问题描述】:
#include<bits/stdc++.h>
#include<vector>
using namespace std;
int main(){
    
    int n=5;
    vector<vector<int>> v;
    v[0][0]=1;
    v[1][0]=1;
    v[1][1]=1;
    cout<<2;    //not getting output 2

}

在上面的代码中,我试图创建一个动态二维数组,但问题是我没有收到任何错误,但数字 2 也没有打印出来。可能是什么原因?

【问题讨论】:

  • #include&lt;bits/stdc++.h&gt;#include&lt;vector&gt; 的存在表明您不知道如何使用 bits/stdc++.h。 Here's a bit of reading to help you out with that。 TL;DR 版本:它是一个实现帮助文件。不要直接包含它。
  • Vector-of-vector 对于“动态 2D 数组”来说是一个糟糕的选择,如果您在谈论传统意义上的 2D 数组(每行具有相同的列数)。如果那是您想要做的,请立即停止。您最好分配一个大小为width * height 的向量,将其封装在一个类中,并使用运算符重载来提供二维索引。
  • @paddy 我不会说永远不会。当然适用于生产或性能关键代码。但是对于具有数十甚至数百个元素的玩具示例或类分配,我认为没有必要使用扁平数组使代码复杂化,特别是因为 C++ 没有任何本机功能。
  • 这是一个公平的选择。我的动机是阻止养成坏习惯。 vector-of-vector 的语义意味着可以并且很可能具有不同长度的行。所以这是一个合适的结构,或者正如你所说的一次性玩具示例。编译器将原生 2D 数组作为平面处理,随机访问索引在内部为 row * ncols + col。为了模拟这一点,可以用basic wrapper 做同样的事情。当然,它不仅仅是一个玩具,但也只是多一点而已。它也更适合常见的数组使用模式。

标签: c++ vector


【解决方案1】:

vector 的默认构造函数创建一个空向量。您正在访问超出未定义行为的向量大小的向量元素。

您可以使用初始化列表来初始化向量:

std::vector<std::vector> v{
   {1},
   {1, 1}
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2018-12-16
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多