【问题标题】:Pointer to a multidimensional vector指向多维向量的指针
【发布时间】:2013-02-19 14:03:07
【问题描述】:

我正在尝试使用 366 x 4 的 2D 矢量初始化指针 (*vectorName)。

两者

vector<int> *vectorName = new vector<int>(366, new vector<int>(4));

vector<int> *vectorName = new vector<int>(366, vector<int>(4));

不工作并给我错误

错误:没有构造函数实例“std::vector, <_ty _alloc>::vector [with_ty=int, _Alloc=std_allocator]” 参数类型是 (const int, std::vector>*)

我能做什么?

这发生在主函数中。

【问题讨论】:

  • @KonradRudolph 该链接似乎没有直接关系。
  • 首先,似乎没有理由使用指针。其次,您没有指向“多维向量”的指针。你有一个指向vector&lt;int&gt; 的指针。那是一维的。
  • 这是multidimensional vector的示例
  • @Dukeling 绝对是(提示:这是一个演示,使用左/右键导航)。

标签: c++


【解决方案1】:
vector<int> *vectorName = new vector<int>(366, vector<int>(4));

上述方法不起作用,因为 vector constructor 模板(忽略一些事情)如下所示:

vector <TYPE> (SIZE, variable of type TYPE);

vector&lt;int&gt;(366, vector&lt;int&gt;(4)) 中,vector &lt;int&gt; (4) 不是int 类型。

要创建一个具有 366 个元素的 vector,这些元素是 vectorints,大小为 4:

vector<vector<int> > *vectorName = new vector<vector<int> >(366, vector<int>(4));

或者,如果你不需要指针:(你很可能不需要)

vector<vector<int> > vectorName(366, vector<int>(4));

附带说明,如果它是固定大小的 2D vector,为什么要使用 vector,而不仅仅是一个数组。这会简单得多:

int arr[366][4];

【讨论】:

  • 感谢这对您有很大帮助。我还是 2D 和 3D 矢量的新手。
【解决方案2】:

我假设您正在尝试使用指向向量的指针来获取向量的动态 C 数组。没有理由这样做。您可以改用向量的向量:

vector< vector<int> >

你可以这样初始化:

vector< vector<int> > vec(4);

for (size_t i = 0; i < 4; ++i) {
    vec[i].resize(366);
}

使用示例:

vec[3][365] = 3;

如果你真的想要一个指向这样一个向量的指针:

vector< vector<int> >* vec = new vector< vector<int> >(4);

for (size_t i = 0; i < 4; ++i) {
    (*vec)[i].resize(366);
}

(*vec)[3][365] = 3;

如果你的大小是恒定的并且你使用的是 C++11 编译器,你可以使用更简单的方法,std::array:

array<array<int, 366>, 4> arr;

// Usage example
arr[3][365] = 3;

或指向动态分配的指针:

array<array<int, 366>, 4>* arr = new array<array<int, 366>, 4>;

// Usage example
(*arr)[3][365] = 3;

【讨论】:

    【解决方案3】:

    你想这样做吗?这会生成一个带有 int 的向量的 2D 向量。它使用大小为 4 的向量创建 366 个向量,其中所有项目都初始化为零。现在你有一个 366 x 4 的二维向量。

    vector<vector<int> > twod( 366, vector<int>(4,0));
    

    如果你想要一个指向这个向量的指针:

    vector<vector<int> >* twodptr = &twod;
    

    如果你真的需要这个。

    【讨论】:

      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多