#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;
}我试图在最后一个向量的最内部维度中动态分配一个列表,但是当我试图为该向量设置一个值时,它会抛出一些编译错误:
'__gnu_cxx::__alloc_traits,错误:从'int‘到
int*>::value_type’{aka 'int*'} -fpermissive
的转换无效
发布于 2021-12-03 21:24:44
错误消息告诉您您正在尝试将一个int分配给一个int*。具体而言,关于这一声明:
storage[i][j][k]=k;storage[i][j][k]返回(对) int*的引用,但k是int。
由于您有三个级别的向量包含一个int[]数组,所以需要4个循环来初始化单个int,但是只有3个循环,所以添加另一个循环:
#include <iostream>
#include <vector>
using namespace std;
int main() {
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*>());
for(int k = 0; k < N; ++k) // <-- decide what N should be!
{
storage[i][j].push_back(new int[5]);
for (int m = 0; m < 5; ++m)
{
storage[i][j][k][m] = k;
}
}
}
}
// don't forget to delete[] all of the new[]'ed arrays!
// consider using either std::unique_ptr<int[]> or
// std::array<int,5> instead of int* ...
return 0;
}我建议简化代码,使其更具可读性,例如:
#include <iostream>
#include <vector>
#include <array>
using namespace std;
using arr5Ints = array<int, 5>;
using vec1D_arr5Ints = vector<arr5Ints>;
using vec2D_arr5Ints = vector<vec1D_arr5Ints>;
using vec3D_arr5Ints = vector<vec2D_arr5Ints>;
int main() {
vec3D_arr5Ints storage(
13,
vec2D_arr5Ints(
13,
vec1D_arr5Ints(N) // <-- decide what N should be!
)
);
for (auto &vec2d : storage)
{
for (auto &vec1d : vec2d)
{
for(auto &arr : vec1d)
{
int k = 0;
for (int &i : arr)
{
i = k++;
}
}
}
}
return 0;
}发布于 2021-12-03 20:42:36
我假设您试图索引到C样式的数组中,在这种情况下,您必须删除向量的一个维度,如下所示:
vector<vector<int*>> storage;然后,您可以按预期的方式索引到C样式数组中。
storage[i][j]当前访问一个vector of int*,其中您只按了一个元素。但是,如果希望保持代码的其余部分不变,只需执行storage[i][j][0][k]=k,我建议移除维度。
https://stackoverflow.com/questions/70220404
复制相似问题