C++ C++;从矢量转换<;配对<;双*,成对<;双精度*,整数*>&燃气轮机;排列

C++ C++;从矢量转换<;配对<;双*,成对<;双精度*,整数*>&燃气轮机;排列,c++,visual-c++,C++,Visual C++,我的问题是,即使我使用操作符[]来获取向量内容,向量仍然是 总是调用size函数(根据我的分析工具和时间度量)。 因为我的C++应用程序非常关键(小于0.1ms),我认为我最好把它转换成数组,但到目前为止我还没弄清楚。 实际矢量如下所示: std::vector<std::pair<double*,std::pair<double*,int*>>> std::vector 您可以将其转换为指向数组第一个元素的指针,如下所示: pair<double *

我的问题是,即使我使用操作符[]来获取向量内容,向量仍然是 总是调用size函数(根据我的分析工具和时间度量)。 因为我的C++应用程序非常关键(小于0.1ms),我认为我最好把它转换成数组,但到目前为止我还没弄清楚。 实际矢量如下所示:

std::vector<std::pair<double*,std::pair<double*,int*>>>
std::vector
您可以将其转换为指向数组第一个元素的指针,如下所示:

pair<double *, pair<double *, int *> > *ar = &v[0];
pair*ar=&v[0];
在C++11中使用
v.data()
而不是
&v[0]


最近,我有点怀疑
size()
函数占用了大量的时间。它通常是一个内联函数,返回一个字段或两个指针字段的差值。

您可以将其转换为指向数组第一个元素的指针,如下所示:

pair<double *, pair<double *, int *> > *ar = &v[0];
pair*ar=&v[0];
在C++11中使用
v.data()
而不是
&v[0]


最近,我有点怀疑
size()
函数占用了大量的时间。它通常是一个内联函数,要么返回一个字段,要么返回两个指针字段的差。

由于问题被标记为“visual c++”,我将假定正在使用此编译器


<>微软实现C++标准库包括各种检查来检测产生未定义行为的情况,并生成运行时错误。默认情况下会启用这些检查(即使对于发布版本!),但您可以通过将
\u SECURE\u SCL
定义为
0
来禁用它们。有关更多信息,请参阅和。

由于问题标记为“visual c++”,因此我假设正在使用此编译器


<>微软实现C++标准库包括各种检查来检测产生未定义行为的情况,并生成运行时错误。默认情况下会启用这些检查(即使对于发布版本!),但您可以通过将
\u SECURE\u SCL
定义为
0
来禁用它们。有关更多信息,请参阅和。

请发布一些支持代码,以清楚了解情况。您确定正在使用发布版本吗?(调试版本可能会检查边界,而发行版不应该)。您使用的是哪个STL实现?如果它是一个时间关键型应用程序,为什么您必须使用调试构建?您必须在调试模式下工作,并且您的应用程序是时间关键型的?至少可以这么说,这听上去不太理想。这听起来真像是愚人节的笑话。通过尝试满足一些无意义的需求,您最终将编写糟糕的代码。我想无论是谁做出了这个决定,都将不得不接受。请发布一些支持代码以清楚地了解情况。您确定您正在使用发布版本吗?(调试版本可能会检查边界,而发行版不应该)。您使用的是哪个STL实现?如果它是一个时间关键型应用程序,为什么您必须使用调试构建?您必须在调试模式下工作,并且您的应用程序是时间关键型的?至少可以这么说,这听上去不太理想。这听起来真像是愚人节的笑话。通过尝试满足一些无意义的需求,您最终将编写糟糕的代码。我想无论是谁做出了这个决定都必须接受。我不是在使用C++11,因为我的雇主要求使用visual studio 2005我不是在使用C++11,因为我的雇主要求使用visual studio 2005现在更好了,但vector::size仍然被称为太多。实际上,我已经处理了大小值,现在更好了,但vector::Size的调用仍然太多。实际上,我已经考虑了大小值