Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.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++ 指向所有std::vector元素的指针_C++_Arrays_Std_C++03 - Fatal编程技术网

C++ 指向所有std::vector元素的指针

C++ 指向所有std::vector元素的指针,c++,arrays,std,c++03,C++,Arrays,Std,C++03,从代码可读性和语义来看,获得指向所有std::vector元素的指针的最佳方法是什么,这样它就可以像通常的数组一样使用?我曾经用过: void Func( int* ) ... std::vector<int> x(1000); Func(&(x[0])); void Func(int*) ... std::向量x(1000); Func(&(x[0])); 但我想知道有没有更漂亮的方法?x、 begin()返回向量::迭代器。

从代码可读性和语义来看,获得指向所有std::vector元素的指针的最佳方法是什么,这样它就可以像通常的数组一样使用?我曾经用过:

void Func( int* )

  ...

std::vector<int> x(1000);
Func(&(x[0]));
void Func(int*)
...
std::向量x(1000);
Func(&(x[0]));

但我想知道有没有更漂亮的方法?x、 begin()返回向量::迭代器。

或C++03中的
&x.front()
x.data()或C++03中的
&x.front()
除了Dave的答案之外,您可以省去括号:

int * xP = &x[0];

除了Dave的答案,你可以省去括号:

int * xP = &x[0];

你也可以这样写:
int*xp=&x.front()
,但是没有最佳的解决方案,你写的所有东西都应该由编译器优化成相同的结果。

你也可以这样写:
int*xp=&x.front()
,但是没有最佳的解决方案,编译器应将您编写的所有内容优化为相同的结果。

向量保证在C++11中有连续的存储空间,在vc++6.0到vc++2012的平台中也有连续的存储空间。

向量保证在C++11中有连续的存储空间,在vc++6.0到vc++2012的平台中也有连续的存储空间。

听起来像您正在做的事情这不是很漂亮吗。你真的需要把这两者混合起来吗?如果代码调用向量上的
assign
resize
,会发生什么情况?可能会使您的指针无效。@Component10同意,我不知道他的用例,但通常需要这样做的原因是与遗留API交互。()@Component10,这主要是关于函数调用的。只能将指针指定给无法更改向量大小的函数:)@klm123:最好将指针作为函数调用的参数获取(如
myFunc(&x.front(),…)
),而不是将其存储在变量中。这样,如果发生重新分配(取决于您对向量所做的操作),您将永远不会有过期的指针变量。@John,据我所知,向量在C++03中保证有连续存储。弦是没有这种保证的。资料来源:Scott Meyers的“有效STL”,第16项:“知道如何将向量和字符串数据传递给legacyAPIsSounds,就像你正在做的那样,这并不是很好。你真的需要把这两者混合起来吗?如果代码调用向量上的
assign
resize
,会发生什么情况?可能会使您的指针无效。@Component10同意,我不知道他的用例,但通常需要这样做的原因是与遗留API交互。()@Component10,这主要是关于函数调用的。只能将指针指定给无法更改向量大小的函数:)@klm123:最好将指针作为函数调用的参数获取(如
myFunc(&x.front(),…)
),而不是将其存储在变量中。这样,如果发生重新分配(取决于您对向量所做的操作),您将永远不会有过期的指针变量。@John,据我所知,向量在C++03中保证有连续存储。弦是没有这种保证的。来源:Scott Meyers的“有效STL”,第16项:“知道如何将向量和字符串数据传递给LegacyApisy您也可以像使用常规数组一样执行
&x[0]
。您也可以执行
&x[0]
,就像使用常规数组一样。在C++11之前,
std::vector
已经有了连续的存储空间。在这方面,std::string是混乱的。在C++11之前,
std::vector
已经有了连续的存储空间。在这方面是混乱的
std::string