我仍然相对较新的C ++,随时随地学习,我很困惑将向量暴露给消费者的“最佳”方式。我并不担心表现。
我有一个包含raw data
向量的类。我有其他类需要使用和处理该向量。
通过阅读其他帖子,我不确定是否返回const
对向量的引用或公开const iterators
,因为没有消费者会修改向量。
一种方式比另一方好吗?还有其他选择或其他需要考虑的事项吗?
typedef std::vector<int> RawNumberContainer;
typedef std::vector<int>::const_iterator RawNumberIterator;
class RawData
{
public:
RawData();
void addNumber(int number)
{
rawNumbers.push_back(number);
}
// this?
RawNumberContainer getRawNumbers() { return rawNumbers; }
// or this?
const RawNumberContainer& getRawNumbersConstReference() { return rawNumbers; }
// or this?
RawNumberIterator getRawNumbersBeginning() { return rawNumbers.begin(); }
RawNumberIterator getRawNumbersEnd() { return rawNumbers.begin(); }
private:
RawNumberContainer rawNumbers;
};
class Something;
class RawDataConsumer
{
public:
// ??
Something* processRawData(RawNumberContainer&);
// ??
Something* processRawData(const RawNumberContainer&);
// ??
Something* processRawData(RawNumberIterator begin, RawNumberIterator end);
};
答案 0 :(得分:1)
有:
const RawNumberContainer& getRawNumbersConstReference() const { return rawNumbers; }
它:
Something* processRawData(const RawNumberContainer&);
答案 1 :(得分:0)
您可以使用:
RawNumberContainer getRawNumbers() const { return rawNumbers; }
通过这种方式,您将确保无法编辑向量(仅限只读访问权限),并且无需在代码中手动声明另一个变量。