読者です 読者をやめる 読者になる 読者になる

std::vector::operator[]に範囲チェックを追加するヘッダ

Programming C++

STLのstd::vectorの配列アクセスはat()とoperator[]があって、at()でないと範囲チェックをしないんだけど、at()とかコードが気持ち悪くなるので使いたくない。あと僕にはわからないが速度の問題が気になる人ももしかしたらいるかもしれない。デバッグの必要があるときだけ範囲チェックがあればいいと思った。

しかし、なんかそういうオプションがもとのvectorヘッダには無さげで、うまいことvector自身に設定するのは無理っぽそうなので、ラッパークラスを作ってdefineで置換するなどといった気持ち悪いことをしてみた。

デバッグでちょっと利用するには便利だと思う。


qnighy's
gist: 177434 — Gist

/**
 *  dvector.h
 *
 *  #include "dvector.h"
 *
 *  then std::vector::operator[] seems to become checking the range of index.
 *
 *  If you aren't using default allocator, I think it may not work.
 *
 */

#ifndef _DVECTOR_H
#define _DVECTOR_H

#include <vector>

namespace std {
    template<typename T>
    class dvector : public std::vector<T>
    {
    public:
        dvector() : std::vector<T>() {}
        explicit dvector(size_t n, const T& value = T()) : std::vector<T>(n,value) {}
        dvector(const std::vector<T>& v) : std::vector<T>(v) {}
        T& operator[](size_t n)
        {
            return this->at(n);
        }
    };
};
#define vector dvector

#endif /* _DVECTOR_H */