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
?
答案 0 :(得分:10)
另一种解决方案是创建自己的数据类型,提供此限制。当我读到你的问题时,我认为限制并不真正属于容器本身,而是属于你想要存储的数据类型。这种实现的示例(开始)可以如下,可能在现有库中已经提供了这样的数据类型。
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; }
...
};
答案 1 :(得分:2)
用另一个课程包装:
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
}
}