- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
当然,C++11 中新的 ranged-for 将非常简洁和有用。据我了解它是如何工作的,它通过尝试 *Argument-Depending-Lookup"( ADT)。
但另一个补充是,所有容器 现在都有 cbegin()
和 cend()
来获取 const_iterators
。
我有点困惑,一方面我想我应该使用
cbegin()
如果我做 not 想要修改容器,另一方面我必须在 ranged-for 中添加一个额外的 const
才能获得相同的结果。
所以,它看起来像这样:
// print all
for(const auto elem : data)
cout << elem
使用 ADT,找到 data.begin(),因此需要 const
。
对
// print everything but the first (a reason not to use range-for)
for(auto it = data.cbegin()+1; it!=data.cend(); ++it)
cout << *it
使用 data.cbegin()
,因此不需要 const
。
但这不是更“惯用”吗?:
// print everything but the first (a reason not to use range-for)
for(const auto it = data.begin()+1; it!=data.end(); ++it)
cout << *it
- 我的“成语”是否正确?有什么补充吗?
- 我应该什么时候使用
cbegin
?
- 我是否错过了范围广泛的内容,仅寻找
begin()
?
编辑:更正错误Value vs Iterator
最佳答案
cbegin()
允许您从非 const
容器中获取 const_iterator
s,而无需显式转换或转换。如果你有一个 const
容器,那么 begin()
无论如何都会返回一个 const_iterator
。
新的 for
构造使用 begin()
因为这是最通用的,它避免了太多的特殊情况。此外,默认情况下,变量是值,而不是迭代器或引用。
std::vector<int> v;
for(auto i: v) // i is an int
dostuff(i);
这避免了在复制元素时修改容器的问题。要获得引用,您需要声明它:
for(auto &i: v)
dostuff(i);
关于c++ - 我什么时候应该使用新的 ranged-for,我可以将它与新的 cbegin/cend 结合使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5814553/
我想知道为什么在 C++11 中引入了 cbegin 和 cend ? 在哪些情况下调用这些方法与 begin 和 end 的 const 重载有区别? 最佳答案 这很简单。假设我有一个 vector
我有一个类,我们称它为 ConstVector,它只定义 cbegin/cend 而不是 begin/end,因为我不想在构造后对其成员进行修改。我尝试像这样使用基于范围的 for 循环: Const
这个问题指的是: When should I use the new ranged-for and can I combine it with the new cbegin/cend? 基于那个问题,
Qt 5.0 在不同的容器类中引入了迭代器方法cbegin() 和cend(),例如QList。或 QMap . 但是这些类中也有 constBegin() 和 constEnd() 方法。 所有这些
这个问题已经有答案了: What is the difference between cbegin and begin for vector? (2 个回答) 已关闭 5 年前。 虽然当我们遍历beg
我正在尝试计算 vector 中长度大于 6 的字符串的数量。这非常简单,但我正在尝试使用 algorithm 库中的 count_if 来完成。所以这是我的代码: int string_size_c
哪个版本的 gcc 编译器支持容器的免费 const_iterator 方法,例如:cbegin、cend、crbegin,crend。我使用带有 -std=c++0x 标志启用的 c++0x 功能的
当然,C++11 中新的 ranged-for 将非常简洁和有用。据我了解它是如何工作的,它通过尝试 *Argument-Depending-Lookup"( ADT)。 但另一个补充是,所有容器 现
如果 std::initializer_list 中的元素总是 const 值,为什么我们有像 begin()/end() 这样的模板方法而不是 cbegin()/cend()?这个名称(按照惯例,与
所以,为了让代码如 auto vect = ...; auto it = vect.begin(), end = vect.end(); // want const_iterator, getting
为什么 std::span 只有 begin 和 end 方法而不是它们的常量迭代器对应物 cbegin 和 cend ? ( standard ) 我还注意到,我能找到的关于 span 的建议确实有
所以我有一个容器,我为其定义了自己的迭代器。在我的示例中,它是一个 Skiplist,但类型并不重要。 我实现了 begin() 和 end() 我想知道如何实现 cbegin() 和 cend()
在Qt 5.2.1中,下面的代码结果怎么不一样? QVector c; if (c.cbegin() != c.begin()) { std::cout c; if (c.begin() !=
我的 C++ 应用程序在 Netbeans 中按预期编译和运行。但是,代码帮助无法识别诸如 cbegin()、cend()、unordered_set 之类的术语,如红色下划线所示: 然而,代码帮助确
我是一名优秀的程序员,十分优秀!