迭代器不兼容的原因
Why iterators are incompatible?
我有以下类:
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迭代器。
相关文章:
- 不明白迭代器,引用和指针失效,一个例子
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- 我从 std::set 得到const_iterator而不是迭代器
- 为什么向量的.at()成员函数返回引用而不是迭代器
- 如果我有一个指向矢量元素的指针,而不是迭代器,如何删除它?
- 对于使用 C 样式指针矢量化的循环,但不使用迭代器
- 使用循环(而不是迭代器)从向量中删除指针
- 将指针而不是迭代器传递到std ::复制
- 如何在不使用迭代器的情况下在 C++ 中打印地图
- C++模板不接受迭代器
- 容器不可知迭代器参数
- 为什么 void* 不是迭代器类型?
- 如何在不使用迭代器的情况下访问任何向量的第 i 个元素
- 为什么在达到容量后在向量中插入时,C++不处理迭代器?
- 我可以用cout而不是迭代器循环打印STL映射吗?
- 为什么 std::bitset 不附带迭代器?
- 字符串::擦除不接受迭代器?
- 是否有一个标准容器允许在不使迭代器无效的情况下插入元素