Как ограничить диапазон элементов вектора C ++ STL? - PullRequest
2 голосов
/ 13 апреля 2010
vector<int> l; 
for(int i=0;i<10;i++){ 
   l.push_back(i); 
} 

Я хочу, чтобы вектор мог хранить только числа из указанного диапазона (или набора). Как это вообще можно сделать?

В частности, я хочу ограничить вектор, чтобы только иметь возможность хранить однозначные цифры.

Итак, если я сделаю l[9]++ (в данном случае l[9] будет 9), это должно дать мне ошибку или предупредить меня. (потому что 10 не однозначное число). Точно так же l[0]-- должен предупредить меня.

Есть ли способ сделать это с помощью C ++ STL vector?

Ответы [ 2 ]

10 голосов
/ 13 апреля 2010

Альтернативным решением было бы создание собственного типа данных, который предусматривает эти ограничения. Читая ваш вопрос, я думаю, что ограничения на самом деле относятся не к самому контейнеру, а к типу данных, который вы хотите сохранить. Пример (начало) такой реализации может быть следующим, возможно, такой тип данных уже предоставлен в существующей библиотеке.

class Digit
{
private:
    unsigned int d;
public:
    Digit() : d(0) {}
    Digit(unsigned int d)
    {
        if(d > 10) throw std::overflow_error();
        else this->d=d; 
    }
    Digit& operator++() { if(d<9) d++; return *this; }
    ...
};
2 голосов
/ 13 апреля 2010

Оберните его другим классом:

class RestrictedVector{
private:
    std::vector<int> things;
public:
// Other things
    bool push_back(int data){
        if(data >= 0 && data < 10){
            things.push_back(data);
            return true;
        }
        return false 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...