c++ - 禁用 C++ vector 的边界检查

标签 c++ g++ libstdc++

使用 STL::vector:

vector<int> v(1);
v[0]=1; // No bounds checking
v.at(0)=1; // Bounds checking

有没有一种方法可以禁用边界检查,而不必将所有 at() 重写为 []?我正在使用 GNU 标准 C++ 库。

编辑:我在怀疑有瓶颈的地方将at()改为[],大大减少了计算时间.但是,由于我在开发代码和运行实验之间反复进行,我想在开发期间启用边界检查,并在我真正运行实验时禁用它。我想 Andrew 的建议是最好的解决方案。

最佳答案

如果你真的想这样做(至少是为了快速和肮脏的分析比较),如果你没有其他的at(),这将起作用。 s

#define at(x) operator[](x)

如果你想保留 at()用于开发和使用operator[]在生产中,只需将其包装在 #ifdef 中.

如果你还有其他 at() s 你可以随时编辑你的#include d <vector>文件。

关于c++ - 禁用 C++ vector 的边界检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2384349/

相关文章:

c++ - 文件输入不循环遍历文件

c++ - 在 64 位服务器上构建代码时 g++ 4.6.3 崩溃

c++ - 当程序退出时,C++库实现如何分配内存但不释放内存?

c++ - 我需要将 std::move 移植到我的内核吗?

c++ - 将内存清理器与 libstdc++ 一起使用

c++ - 无法访问类 'CObject' 中声明的私有(private)成员?

c++ - 为什么 'auto' 不尊重一元减号运算符?

c++ - 在我的命名空间中公开外部库类时使用 typedef 或 using 关键字

c++ - "control reaches end of non-void function"枚举类型完全处理大小写切换

c++ - 未定义模板的隐式实例化 'std::__1::function<int (double, double, double, double)>'