std::vector的std::vector的指针

Pointer of std::vector of std::vector

本文关键字:vector std 指针      更新时间:2023-10-16

快速问题:

有可能制作一个可以引用std::vector<std::vector<int> >std::vector<std::vector<double>>的指针吗?

Thx

如果可以选择使用boost,则可以使用boost:variant。从技术上讲,它不是一个指针,而是一个类型安全的单项容器,但它应该能够在不使用void*的"大炮"方式的情况下完成任务。

如果必须使用联合构造

union intordouble
{
    int x;
    double d;
};
int main()
{
    vector<intordouble> v;
    return 0;
}

基本上,向量总是并集的,所以你有一个指向它的指针,不需要微分。请看一下在C++中使用并集是一种好的做法吗?

<bad_guy_mode>

typedef std::vector<std::vector<int>>* vvi_ptr;
typedef std::vector<std::vector<double>>* vvd_ptr;
union int_or_double_vecs{
  vvi_ptr int_vector;
  vvd_ptr double_vector;
};

(请注意,一次只能访问一个成员,而且这只是最后设置的成员。)

</bad_guy_mode>

void*可以指向任意一个,但在使用之前必须强制转换为正确的类型。

类型化指针只能指向指定的类型,包括从中继承的类型。vector的不同专业化是不同的类型,并且不共享一个公共基类,因此任何类型化指针都不能同时指向这两种类型。

如果这真的是你认为你需要做的事情,你可以考虑使用一个有区别的并集,比如boost::variant来保存各种不同的指针类型。

相关文章: