Igo*_*Oks 4 c++ oop vector law-of-demeter
哪一个更好:
public:
const vector<int> & GetPointsVector();
private:
vector<int> PointsVector;
Run Code Online (Sandbox Code Playgroud)
要么:
public:
int GetCurrentPoint();
void MoveToFirstPoint();
void MoveToNextPoint();
bool IsAtLastPoint();
size_t GetNumberOfPoints();
private:
vector<int> PointsVector;
Run Code Online (Sandbox Code Playgroud)
ami*_*mit 13
两者都不是.最好返回begin()和end()迭代器,或者更好地返回迭代器的boost :: range.
private:
typedef std::vector<int> PointsContainer;
public:
typedef boost::iterator_range<PointsContainer::const_iterator> PointsRange;
PointsRange getPointsRange() const {
return boost::make_iterator_range(pointsContainer_.begin(), pointsContainer_.end());
}
Run Code Online (Sandbox Code Playgroud)
优点是遍历逻辑隐藏在范围/迭代器中
在使用时,一种替代方法是:
int p;
foreach(p, obj.getPointsRange()) {
//...
}
Run Code Online (Sandbox Code Playgroud)
除此以外
C::PointsRange r = obj.getPointsRange();
for(C::PointsRange::iterator i = r.begin(); i != r.end(); ++i) {
int p = *i;
//...
}
Run Code Online (Sandbox Code Playgroud)