我有这样的方法
void foo(std::vector<std::array<int, 3>> iVec){
....
}
我不想更改此方法,但我需要将此向量作为参数传递std::vector<int>
据我了解,这两个向量占用相同的内存......因此,理论上我可以使用方法std::move
按原样移动此向量。但是这个向量有不同的大小。所以。。。我不知道。。。
一个人告诉我,如果改变函数,它可能会得到两个 int 指针,所以这是可能的。
但是我不明白没有例子是什么意思......如果有人能举个例子,我真的很感激。
但无论如何,问题仍然是:是否可以将我的向量作为具有另一种类型的函数参数传递。如果是,那如何?
随便问
C++标准不保证sizeof(std::array<MyType, N>)==sizeof(MyType)*N
。也就是说,即使单个std::array
的元素是连续的,array
s 的vector
也可能不均匀分布数组的元素。因此,没有符合标准的方法可以做到这一点,因为两个向量不一定"占用相同的内存"。
您也许可以在编译器上与reinterpret_cast
等一起使用。(来自重新解释的向量类型的std::move
肯定是行不通的,理论上不行,在实践中也不行。这将不是便携式的,可靠的或好主意。您有三个选项:复制数据、更改源类型或更改目标类型。
我不想改变这种方法...
但你应该。如果你让它与迭代器而不是容器一起工作,你将获得更大的灵活性:
template <typename IT>
void foo(IT begin, IT end){
....
}
现在传递begin
和end
任何可能的容器。但是,如果你想回到将迭代器传递给std::vector<std::array<int, 3>>
你必须投入一些额外的努力来获得一个迭代器类型,让你从[0][0]
迭代到[size_x][size_y]
,但由于数组的大小都是3,这不应该太复杂。无论如何,您应该考虑使用平面矢量而不是 2D 结构。