【问题标题】:allocating memory for vectors为向量分配内存
【发布时间】:2018-12-29 10:05:49
【问题描述】:

谁能告诉我这个程序为什么会崩溃? 基本上我是在尝试创建一个数组向量?

#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int main() {
    vector <int> arr[100];
    arr[0][0] =5;
    printf("%d",arr[0][0]);

    return 0;
}

【问题讨论】:

    标签: c++ vector


    【解决方案1】:

    您正在创建一个包含 100 个空向量的数组,而不是数组向量(为什么不是向量向量?)。没有什么可以使用的。

    使用这个:

    vector<vector <int>> arr(100, vector <int>(size));
    

    大小为您需要的大小。

    如果你想要一个数组向量,使用:

    vector<array<int, 100>> arr(size);
    

    【讨论】:

      【解决方案2】:

      因为您没有在vector 中分配元素。您将 std::vector 与静态数组混淆了,它们需要调用 .push_back() 或执行 prealloc。

      所以在您的代码中arr[0] 将起作用,因为这是对静态数组的第一个元素的引用,而arr[0][0] 正在崩溃。

      试试

      arr[0].push_back(5)
      

      【讨论】:

      • 你能告诉我 a[0] 的值是多少吗?它会是该向量中第一行数组的地址吗?
      • a[0] 的值为空std::vector。不是第一行,也不是第二行,在你用push_back()填充之前它是空的
      • 我读到我们不能在向量中存储数组(向量 v)但是这里发生的事情是我们将每个行数组的地址存储在向量中吗?请帮助我是 cpp 的新手
      • std::vector 是一个类,它不仅仅是一个row。此类具有管理动态内存分配的内部指针,您不应将其视为一行。所以你有 100 个类的静态数组,其中每个类都是 std::vector 的一个实例
      • 那是你犯的错误,你没有数组向量,这是不可能的。这就是 std::array 的用途(见我的回答)。
      猜你喜欢
      • 2014-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2021-12-26
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多