const-iterator相关内容
我想更改 set 中的元素,所以我使用了 set::iterator.但是,编译器认为“元素是 const".然后我意识到 set::iterator 是一个 const_iterator... 那么,我怎样才能改变元素呢?删除它然后插入一个新的? 解决方案 set 的元素会按顺序排列.如果允许你修改一个元素,那么这个排序顺序就不能保持.因此,您不能修改该项目.您需要删除
..
如何在 C++ 中从 iterator(该容器类的)获取一个 const_iterator(某个容器类的)?insert_iterator 中的 const_iterator 怎么样?生成的 iterator 应该指向与原始位置相同的位置. 解决方案 容器需要提供 iterator 作为可转换为 const_iterator 的类型,所以可以隐式转换: Container::iterat
..
考虑以下代码: #include #include 主函数(){std::vectorvec{1,2,3,5};for(自动它=vec.cbegin();it!=vec.cend();++it){std::cout
..
最近有人提出 Scott Meyers 的文章说: 更喜欢 iterators 而不是 const_iterators (pdf 链接). 其他人评论说这篇文章可能已经过时了.我想知道你的意见是什么? 这是我的:这篇文章的主要观点之一是您不能在 const_iterator 上擦除或插入,但我认为将其用作反对 const_iterators.我认为 const_iterators
..
这两者在 STL 内部实现方面有什么区别.性能有什么区别?我想当我们以“只读方式"遍历向量时,我们更喜欢 const_iterator,对吧? 谢谢. 解决方案 没有性能差异. const_iterator 是一个指向 const 值的迭代器(类似于 const T* 指针);取消引用它会返回对常量值 (const T&) 的引用并防止修改引用的值:它强制执行 const-正确
..
我想知道为什么在 C++11 中引入了 cbegin 和 cend ? 在哪些情况下调用这些方法与 begin 和 end 的 const 重载有区别? 解决方案 很简单.假设我有一个向量: std::vector向量; 我用一些数据填充它.然后我想得到一些迭代器.也许让他们四处走动.也许到 std::for_each: std::for_each(vec.begin(), v
..
作为这个问题的扩展const_iterators 更快吗?,我还有一个关于 const_iterators 的问题.如何删除 const_iterator 的常量?尽管迭代器是指针的广义形式,但 const_iterator 和 iterator 仍然是两个不同的东西.因此,我相信,我也不能使用 const_cast 从 const_iterator 转换为 iterators. 一种方
..
我有一个自定义容器类,我想为其编写 iterator 和 const_iterator 类. 我以前从未这样做过,也没有找到合适的方法.关于迭代器创建的准则是什么?我应该注意什么? 我还想避免代码重复(我觉得 const_iterator 和 iterator 共享很多东西;一个应该继承另一个吗?). 脚注:我很确定 Boost 可以缓解这种情况,但由于许多愚蠢的原因,我不能在这
..
我创建了一个集合,我想为其提供一个 STL 风格的随机访问迭代器.我正在四处寻找迭代器的示例实现,但没有找到.我知道 [] 和 * 运算符需要 const 重载.迭代器要成为“STL 风格"的要求是什么?还有哪些其他需要避免的陷阱(如果有的话)? 附加上下文:这是一个库,我不想引入任何对它的依赖,除非我真的需要.我编写了自己的集合,以便能够使用相同的编译器提供 C++03 和 C++11 之
..
我正在编写一个自己的容器类,但遇到了一个我无法理解的问题.这是显示问题的基本示例. 它由一个容器类和两个测试类组成:一个使用 std:vector 的测试类可以很好地编译,第二个测试类尝试以完全相同的方式使用我自己的容器类,但编译失败. #include #include #include 使用命名空间标准;模板 类 MyContainer{上市:类迭代器{上市:typedef 迭代器 s
..
这两者在 STL 内部实现有什么区别.性能有什么区别?我想当我们以“只读方式"遍历向量时,我们更喜欢 const_iterator,对吧? 谢谢. 解决方案 没有性能差异. const_iterator 是一个指向 const 值的迭代器(就像一个 const T* 指针);取消引用它返回对常量值的引用(const T&)并防止修改引用的值:它强制执行 const-正确性.
..
我们的编码指南更喜欢 const_iterator,因为与普通的 iterator 相比,它们要快一些.当您使用 const_iterator 时,编译器似乎优化了代码. 这真的正确吗?如果是,那么内部究竟发生了什么使 const_iterator 更快?. 编辑:我写了一个小测试来检查 const_iterator 与 iterator 并发现不同的结果: 对于迭代 10,00
..
作为这个问题的扩展const_iterators 是否更快?,我还有一个关于 const_iterators 的问题.如何删除 const_iterator 的常量性?虽然迭代器是指针的一般形式,但 const_iterator 和 iterator 仍然是两个不同的东西.因此,我相信,我也不能使用 const_cast 从 const_iterator 转换到 iterators. 一
..
我已经编写了以下代码片段,但它似乎不起作用. int main(){int VCount, v1, v2;对>边缘;向量>>边缘;浮动 w;cin >>VCount;while(cin>v1){cin >>v2>>w;edge.first = w;edge.second.first = v1;edge.second.second = v2;edge.push_back(edge);}排序(edg
..
我试图用C ++实现自己的双向链接列表(my_list)代码,尤其是列表的迭代器类.我的问题是我想从迭代器到const_iterator进行隐式转换,以便例如代码my_list::iterator it = l.begin();其中l是my_list的实例进行编译.但是,在没有编译器抱怨的情况下,我找不到解决方法. 这是实现列表节点和迭代器类的代码: template
..
为什么const_iterator不提供const_iterator::base()函数来获得与reverse_iterator一样的相应非常量iterator? 考虑以下伪代码(例如几何算法): std::container universe; auto it = std::cbegin(universe); std::list in
..
为什么要使用STL std::iterator_traits::value_type 与 具有相同的类型 std::iterator_traits::value_type 为什么这样设计?第一个不应该是 const T 而第二个是 T 吗?您应该如何采用迭代器的基本const正确类型?我知道您可以编写自己的模板类和专业化知识并从中获取 s
..
我想更改 set 中的元素,所以我使用了 set :: iterator 。但是,编译器认为“元素是const”。然后我意识到 set :: iterator 是 const_iterator ... 那么,如何更改元素?删除它,然后插入一个新的吗? 解决方案 集中的元素将按排序顺序。如果允许您修改元素,则无法保持此排序顺序。因此,您不能修改该项目。您需要删除现有元素
..
这是我的代码: #include #include using namespace std; int main(){ set st; st.insert(1); int x = st.find(1) - st.begin(); return 0; } 我得到了error: no match for 'oper
..
我有这段代码: auto it = my_map.lower_bound(my_key); 以下断言给我错误: static_assert(std :: is_same :: const_iterator> :: value,“Error”); 以下一个是好的: stati
..