std :: vector <std :: array <char,2 =“”>&gt;的C ++数据连续性

时间:2017-09-14 20:37:59

标签: c++ c++11 vector stl

std::vector<std::array<char, 2>>的数据如何在记忆中排列?我可以将向量重新转换为std::vector<char>并以这种方式访问​​数组的内容吗?我认为这不是它的工作方式,但由于它是C ++,我想确定。如果它的工作方式与std::vector<std::vector<char>>相同,我不需要解释,因为this解释得很好。

2 个答案:

答案 0 :(得分:3)

std::vectorstd::array具有更少的简单布局。您正在尝试将矢量投射到不同类型的矢量,即使是不同大小的矢量。没有运气。

答案 1 :(得分:-1)

  

我可以将vector改写为std::vector<char>并以这种方式访问​​数组的内容吗?

不,你不能。 std::vector具有比普通旧数组和指针更丰富的语义。如果调用任何成员函数,将导致未定义的行为。

但是,如果char的实现不使用任何填充,则可以像访问大小为size of the vector * 2 std::array的数组一样访问数组。即sizeof(array<char, 2> == sizeof(char[2])

在这种情况下,您可以使用:

char* cp  = &(thevector[0][0]);

访问数组的内容。