C++ C++;std::vector的数据连续性<;std::数组<;char,2>&燃气轮机;
C++ C++;std::vector的数据连续性<;std::数组<;char,2>&燃气轮机;,c++,c++11,vector,stl,C++,C++11,Vector,Stl,std::vector的数据在内存中是如何布局的?我是否可以将向量重新转换为std::vector,并以这种方式访问数组的内容?我认为这不是它的工作方式,但因为它是C++,所以我想确定。如果它与std::vector的工作方式相同,我不需要解释,因为它解释得很好。std::vector的布局比std::array的布局更简单。您正在尝试将向量强制转换为不同类型的向量,甚至是不同大小的向量。不走运。std::vector的布局比std::array的布局更简单。您正在尝试将向量强制转换为不同类型的
std::vector
的数据在内存中是如何布局的?我是否可以将向量重新转换为std::vector,并以这种方式访问数组的内容?我认为这不是它的工作方式,但因为它是C++,所以我想确定。如果它与std::vector
的工作方式相同,我不需要解释,因为它解释得很好。std::vector
的布局比std::array
的布局更简单。您正在尝试将向量强制转换为不同类型的向量,甚至是不同大小的向量。不走运。std::vector
的布局比std::array
的布局更简单。您正在尝试将向量强制转换为不同类型的向量,甚至是不同大小的向量。不走运
我可以将向量
重铸到std::vector
并以这种方式访问数组的内容吗
不,你不能std::vector
比普通的旧数组和指针具有更丰富的语义。如果调用任何成员函数,将导致未定义的行为
但是,如果std::array
的实现不使用任何填充,则可以访问该数组,就像它是一个向量大小为*2的char
数组一样。i、 e.sizeof(array==sizeof(char[2])
在这种情况下,您可以使用:
char* cp = &(thevector[0][0]);
以访问数组的内容
我可以将向量
重铸到std::vector
并以这种方式访问数组的内容吗
不可以。std::vector
比普通的旧数组和指针具有更丰富的语义。如果调用任何成员函数,将导致未定义的行为
但是,如果std::array
的实现不使用任何填充,则可以访问该数组,就像它是一个向量大小为*2的char
数组一样。即sizeof(array==sizeof(char[2])
在这种情况下,您可以使用:
char* cp = &(thevector[0][0]);
访问数组的内容。
vector
与vector
不同vector
是连续的,vector
不是连续的。vector
与vector
不同vector
是连续的,vector
不是连续的。我认为std::array的结尾不禁止有一些填充。A至少在C++11中是这样的。“std::array
保证只保存一个char[2]
”不。如果您有证据表明现在允许这样做,请回答这个问题,这是一个重复。我发现“这个容器是一个聚合类型,它的语义与保存C样式数组的结构相同[N]这里:@eclipse,不幸的是,这仍然不能阻止一个实现使用填充。我认为std::array并没有被禁止在最后使用一些填充。至少在C++11中曾经是这样。std::array
保证只保存一个char[2]
”不。如果你有证据表明这是允许的,请回答这个问题,这是重复的。我发现“这个容器是一个聚合类型,它的语义与一个结构相同,它持有一个C样式数组T[N]作为它唯一的非静态数据成员。”这里:@eclipse,不幸的是,这仍然不能阻止一个实现使用填充。