【问题标题】:Why does "new vector<int>[5]" not create an array of vectors? [closed]为什么“new vector<int>[5]”不创建向量数组? [关闭]
【发布时间】:2019-08-13 05:58:56
【问题描述】:

我有一个代码 sn-p,旨在使用关键字“new”创建一个向量数组。这样由 new 返回的地址被分配给一个向量类型的指针。

vector<vector<int>> *adj = new vector<vector<int>>[V]; // creates a 2-D vector

vector<vector<int>> *adj = new vector<vector<int>>[V]; //creates a 1-D vector

类比内置数据类型数组的创建,

int *arr = new int[V]; //creates an array of integers

下面的代码应该创建一个包含整数的向量数组

vector<int> *arr = new vector<int>[V]; //should create an array of vectors

但它实际上创建的是一个整数向量。

我是否在这里遗漏了与分配给指针的 STL 和迭代器相关的内容?

【问题讨论】:

  • int *arr = new int(5); 创建一个值为 5 的 int
  • 为什么要这样做? vector&lt;vector&lt;int&gt;&gt;(5,vector&lt;int&gt;(5,0)) 将创建一个 5x5 向量的向量,每个值初始化为 0。如果需要,您可以使用 resize 动态调整大小,我认为不需要新的。
  • 题目与正文不符。标题中的代码确实创建了一个向量数组。
  • new vector&lt;int&gt;[5] 确实 创建 5 个 empty vector&lt;int&gt;s。为什么你认为它只创造了一个?
  • @qoinqoder 在你编辑你的问题之后,你的问题的前提现在是错误的。 new vector&lt;int&gt;[V]; 确实创建了一个向量数组。为什么你认为没有?

标签: c++ arrays pointers vector


【解决方案1】:

这里是:

int *arr = new int(5);

不创建5ints 的数组。它生成一个int 并将其初始化为5。你想要的是:

int *arr = new int[5];

同样,对于向量,你想要这样:

vector<int> *arr = new vector<int>[5];

代码new vector&lt;int&gt;(5); 将改为生成一个大小预设为5 的向量。

【讨论】:

  • 我已更新(更正了括号 []),请查看问题一次。谢谢。
【解决方案2】:

假设是错误的。

new vector<int>[5]

创建一个包含 5 个 vector&lt;int&gt; 类型元素的数组。

此代码有效:

#include <vector>
#include <iostream>

int main() {
    std::vector<int> *v = new std::vector<int>[5];
    v[0].push_back(1);
    v[0].push_back(2);
    v[0].push_back(3);
    v[0].push_back(4);
    v[3].push_back(31);
    v[3].push_back(32);
    std::cout << v[0][1] << '\n';
    std::cout << v[0][2] << '\n';
    std::cout << v[3][1] << '\n';
    std::cout << v[4].size() << '\n';
    delete[] v;
    return 0;
}

输出是

2
3
32
0

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 1970-01-01
    • 2012-04-01
    • 2023-01-20
    • 2016-05-30
    • 2020-07-19
    • 2023-04-03
    • 1970-01-01
    • 2017-01-20
    相关资源
    最近更新 更多