我正在编写一个相当复杂的应用程序,该应用程序大量使用了STL容器。该应用程序具有一个相对简单,性能敏感的部分,该部分遍历多个std::map
,并且执行了数千次。测试表明,与禁用检查的迭代器(将_SECURE_SCL
设置为0)进行编译相比,整个程序几乎提高了2倍的速度,完全集中在本节中。
但是,我无法将_SECURE_SCL
设置为0来编译应用程序,因为需要与启用了_SECURE_SCL
的情况下编译的库链接,并混合使用_SECURE_SCL
设置会导致问题。另外,当所有性能敏感位都发生在单个屏幕代码中时,我发现在整个应用程序中使用未经检查的迭代器是很愚蠢的。那等于把婴儿的洗澡水扔掉了。
我必须选择哪些选项来对性能敏感的代码/容器有选择地使用未检查的迭代器,同时保持与使用检查的迭代器编译的库的兼容性?
最佳答案
这对我有用:
vector<BYTE> v;
vector<BYTE>::iterator i;
vector<BYTE>::iterator::_Unchecked_type ui;
i = v.end();
ui = i._Unchecked();
ui++;