Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;std::vector的数据连续性<;std::数组<;char,2>&燃气轮机;_C++_C++11_Vector_Stl - Fatal编程技术网

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,不幸的是,这仍然不能阻止一个实现使用填充。