草庐IT

const_iterators

全部标签

c++ - reverse_iterator 适配器

我正在尝试为我的迭代器和const_iterator类实现反向迭代器适配器,但遇到了一些麻烦。如果有人可以指导我解决这个问题,将不胜感激!我的想法是我应该能够从我的rbegin()和rend()函数调用中创建一个反向迭代器reverse_iteratorrbegin();reverse_iteratorrend();const_reverse_iteratorrbegin()const;const_reverse_iteratorrend()const;我在类里面使用了以下typedef:typedefbtree_iteratoriterator;typedefconst_btree_

c++ - const 将公共(public)成员引用到私有(private)类成员 - 为什么它有效?

最近,我发现了一个有趣的讨论,讨论如何在不使用多个getter混淆设计的情况下允许对私有(private)成员进行只读访问,其中一个建议就是这样做:#includeclassA{public:A():_ro_val(_val){}voiddoSomething(intsome_val){_val=10*some_val;}constint&_ro_val;private:int_val;};intmain(){Aa_instance;std::cout输出:$./a.out0130GotW#66明确指出对象的生命周期开始whenitsconstructorcompletessucces

c++ - 关于 const 禁止的重言式比较的警告?

以下代码在GCC和Clang上生成警告:intmain(){unsignedn=0;return(n警告是:$g++-4.7-std=c++11-O3-Wall-Wextrat.cc-ott.cc:Infunction‘intmain()’:t.cc:3:16:warning:comparisonofunsignedexpression到目前为止,还不错。现在我将变量更改为const:intmain(){constunsignedn=0;return(n而且两个编译器突然很乐意在没有警告的情况下编译代码:$g++-4.7-std=c++11-O3-Wall-Wextrat.cc-ot$

c++ - 通过重新使用的非 `const` 名称修改动态分配的 -`const` 对象是否合法?

考虑以下程序:#includeintmain(){intx=0;constint*px=new(&x)constint(0);x=1;std::cout它compilesunderGCC4.8(并产生“预期的”输出),但我怀疑它完全是UB,因为动态对象的类型为constint(whichremainspartofthetype)。但是,如果是的话,为什么编译器不阻止我违反const-correctness? 最佳答案 tl;dr:是的,这是未定义的行为。不,编译器不会对其进行诊断。一般来说,编译器不会(有时不能)诊断UB。const

c++ - 获取最接近键的 std::container::iterator

我一直想知道是否可以根据可能存在或可能不存在的起始键遍历map的一部分。如果我有一张map,上面有很多位置的键,我想说,"returnaniteratorsuchthatif_Keydoesn'texist,Iamreturnedtheclosestiteratorbefore_Key"我可以使用它来emplace_hint一个新值,或者循环遍历特定范围的位置,即使搜索键不存在也是如此。我们是否可以通过某种方式轻松使用这种功能? 最佳答案 使用lower_bound然后减少迭代器,在检查它不指向开始迭代器之后,正如AndreKost

c++ - static, constexpr, const - 它们一起使用时是什么意思?

我对这些说明符感到非常沮丧,因为我理解它们单独使用时的作用,但我发现当它们一起使用时很难理解。例如,野外的一些代码包含-namespace{staticconstexprcharconst*Hello[]={"HelloString","WorldString"};...}这到底有什么用?既然已经在匿名命名空间中,为什么还要使用static。静态内部类是有意义的(除非你正在编写缺少namespace的C),没有类-为什么??为什么使用constexpr-没有理由在这里使用它。一个简单的const就不行吗?然后const*Hello对我来说没有意义。这里不变的是什么?字符串或指针*Hel

c++ - Clang 模块与 std <iterator> 和 <boost/move/iterator.hpp> 交互

(有关我正在使用的特定版本的Boost和Clang的信息,请参阅问题结尾)使用新的实验性-fmodules从master/HEAD在Clang中编译功能,使用如下所示的命令行选项编译以下文件时出现构建错误:#include#include编译命令及错误:anhall@leviathan:/bin/clang++-ofile.o-cfile.cpp--std=c++1z-stdlib=libc++-fmodulesInfileincludedfromfile.cpp:2:Infileincludedfrom/usr/local/include/boost/move/iterator.hp

c++ - 接受 STL_container_type<string>::iterator 的模板化参数

我有一个函数,其中有一个包含字符串的容器(例如vector、set、list),并且给定一个开始迭代器和一个结束迭代器,通过迭代器范围处理字符串。目前函数声明如下:templatevoidProcessStrings(ContainerIterbegin,ContainerIterend);现在这将接受任何符合实现operator*的隐式接口(interface)的类型,前缀operator++以及函数体中的任何其他调用。我真正想做的是像下面这样明确限制输入量的定义(伪代码警告):template::iterator>voidProcessStrings(Container::iter

c++ - 如何将单字节 const char* 转换为 UTF-8 编码

我有一个函数,它要求我传递一个由char*指向的UTF-8字符串,并且我有一个指向单字节字符串的char指针。如何在C++中将字符串转换为UTF-8编码?我可以使用任何代码来执行此操作吗?谢谢! 最佳答案 假设是Linux,您正在寻找iconv.当您打开转换器(iconv_open)时,您将传递from和to编码。如果您将空字符串作为from传递,它将从您系统上使用的应该与文件系统匹配的语言环境转换而来。在Windows上,您与MultiByteToWideChar几乎相同您将CP_ACP作为代码页传递的位置。但在Windows上,

c++ - 按值传递还是 const 引用?

这个问题在这里已经有了答案:Arethedaysofpassingconststd::string&asaparameterover?(13个答案)关闭9年前。有asetofgoodrulestodeterminewhetherpassbyvalueorconstreference如果函数打算改变参数作为副作用,取它通过非常量引用。如果函数不修改它的参数并且参数是原始类型,按值取值。否则按const引用取,以下情况除外案例:如果函数需要复制const无论如何引用,按值(value)接受。构造函数如下,如何确定?classA{public:A(stringstr):mStr(str){}