为什么迭代器不兼容?

时间:2013-11-28 08:24:02

标签: c++ vector iterator

我有以下课程:

class Manifest {
public:
    Manifest(void);
    ~Manifest(void);

    std::vector<ManifestDirectory> get_directories() const { return directories_; }
    void set_directories(std::vector<ManifestDirectory> dirs) { directories_ = dirs; }
    int ReadManifest(Manifest &manifest);

private:
    std::vector<ManifestDirectory> directories_;
};

以及简化用法:

Manifest manifest;
manifest.ReadManifest(manifest);

for (std::vector<ManifestDirectory>::iterator it = manifest.get_directories().begin(); it != manifest.get_directories().end(); ++it) {
    // Do something
}

如何修改get_directories(),因此它不会复制整个directories_it for for循环将指向相同的directories_.begin()?

现在迭代器是不兼容的。

1 个答案:

答案 0 :(得分:0)

如果您不希望在get_directories()之外修改目录,请返回const ref:

const std::vector<ManifestDirectory>& get_directories() const { return directories_; }

但请确保创建const迭代器。