【发布时间】:2022-01-10 04:21:08
【问题描述】:
#include <iostream>
#include <vector>
#include "malloc.h"
using namespace std;
int main() {
// Write C++ code here
vector<vector<vector<int*>>> storage;
for (int i=0; i< 13; i++)
{
storage.push_back(vector<vector<int*>>());
for (int j=0; j< 13; j++)
{
storage[i].push_back(vector<int*>());
storage[i][j].push_back((int*)malloc(5 * sizeof(int)));
for (int k =0; k<4; k++)
{
storage[i][j][k]=k;
}
}
}
return 0;
}
我正在尝试在最后一个向量的最内层维度内动态分配一个列表,但是当我尝试为向量设置一个值时它会引发一些编译错误:
错误:从 'int' 到 '__gnu_cxx::__alloc_traits<:allocator>::value_type' {aka 'int*'} [-fpermissive] 的无效转换
【问题讨论】:
-
如果您询问错误消息的含义,请将完整消息粘贴到您的问题中。我怀疑您的错误与
int和int*之间的差异有关。 -
我正在尝试在最后一个向量的最内层动态分配一个列表不要,只需使用另一个向量,让它为您处理内存管理。
-
每当你觉得需要使用 C 风格的演员表时(就像你对
(int*)malloc(...)所做的那样),你应该把它当作你做错了什么的迹象。 -
您想要 3D 还是 4D 阵列?如果你想要 4D,你的嵌套循环太少,
[]的级别太少。如果你想要 3D,你的一层数组太多了。 (在这种情况下,我建议删除*和malloc。顺便说一下malloc.h是一个错误的标题,你需要stdlib.h)事实上你有storage[i]和storage[i][j]在相同的缩进级别正确彼此相邻是暗示正在发生一些可疑的事情。 -
允许您在对象的大部分维度上使用
std::vector似乎很不寻常,但对于其中一个维度,您必须使用非常不友好的C++malloc。
标签: c++ arrays vector struct stl