std::vector的std::vector的指针
Pointer of std::vector of std::vector
快速问题:
有可能制作一个可以引用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
来保存各种不同的指针类型。
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- 连接和压缩标准::vector<std::字符串的最佳方法>
- C++从 std::vector<std::function<中删除 std::function>>
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 如何使用 CUDA 将 std::vector<std::string> 复制到 GPU 设备
- 编译错误 std::vector<std::shared_ptr<T>>迭代器和擦除方法
- 将 std::vector<std::unique_ptr<T>> 移动到 std::vector<std::shared_ptr<T>>
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 使用 std::vector<std::future<int>> 和 std::async 启动几个线程时中止
- 为什么转置这个 std::vector<std::vector<std::string> > 这么慢?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 在 boost::<double>asio::buffer 中使用像 std::vector<std::complex> 这样的参数
- 如何从 std::initializer_list<char const* 构建 std::vector<std::string>>
- 如何检查 std::vector<std::string> 的元素是否以某个子字符串开头?
- 在 std::vector<std::vector 中重新存储内部向量<TYPE>>
- 将 std::vector<std::string> 转换为 const char* const*
- 不能将结构push_back() 转换为 std::vector<std::shared_ptr<theStruct>> theVector
- SWIG:传递一个 std::vector< std::vector <double> >指向 python 的指针
- 将 std::vector<std::p air<const K, V>*> 转换为 std::vector<std::p air<const K, V>&g