我的问题是,即使使用operator []来获取我的向量内容,矢量是 始终调用size函数(根据我的分析工具和时间测量)。因此,由于我的C++应用程序对时间非常关键(小于0.1ms),所以我认为我最好将它转换为一个数组,但目前为止我无法弄清楚。 实际向量看起来像:从vector <pair <double *,pair <double *,int * >>到数组的C++转换
std::vector<std::pair<double*,std::pair<double*,int*>>>
我的问题是,即使使用operator []来获取我的向量内容,矢量是 始终调用size函数(根据我的分析工具和时间测量)。因此,由于我的C++应用程序对时间非常关键(小于0.1ms),所以我认为我最好将它转换为一个数组,但目前为止我无法弄清楚。 实际向量看起来像:从vector <pair <double *,pair <double *,int * >>到数组的C++转换
std::vector<std::pair<double*,std::pair<double*,int*>>>
可以将其转换为一个指针到一个这样的数组的第一个元素:
pair<double *, pair<double *, int *> > *ar = &v[0];
使用v.data()
代替&v[0]
在C++ 11。
无关地,我有点怀疑size()
函数占用了可测量的时间量。它通常是一个内联函数,它返回一个字段或返回两个指针字段的差异。
我并没有使用C++ 11,因为我的雇主要求现在使用visual studio 2005 –
由于问题标记为'visual-C++',因此我将假定正在使用该编译器。
C++标准库的Microsoft实现包含各种检查,以检测产生未定义行为并产生运行时错误的情况。这些检查默认启用(即使对于发布版本也是如此),但您可以通过将_SECURE_SCL
定义为0
来禁用它们。有关更多信息,请参见here (MSDN)和here。
它更好,但vector :: size会被调用得太多。我其实已经考虑了Size值 –
请张贴一些支持代码以便清楚了解情况。 –
你确定你在使用发布版本吗? (调试版本可能检查边界,版本不应该)。你正在使用哪种STL实现? – Philipp
我知道这是因为Debug版本,但我必须使用它。 –