迭代器不兼容的原因

Why iterators are incompatible?

本文关键字:不兼容 迭代器      更新时间:2023-10-16

我有以下类:

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,因为循环将指向相同的目录_.begin()?

现在正在抛出迭代器不兼容。

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

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

但是一定要创建const迭代器。