草庐IT

c++ - 将 Boost FileSystem3 迭代器转换为 const char*

我正在使用BoostFileSystem3循环遍历目录中的一些文件,我需要将文件名转换为char*以用于另一个库,不幸的是我的C++foo缺失,任何人都可以帮忙吗?intmain(intargc,char*argv[]){pathp(argv[1]);//preadsclearerthanargv[1]inthefollowingcodetry{if(exists(p))//doespactuallyexist?{if(is_regular_file(p))//isparegularfile?coutvec;//storepaths,vecv;//sowecansortthemlate

c++ - 有效地计算两个 std::multimap 迭代器之间的条目数

我想在不到O(N)的时间内计算std::multimap的两个迭代器之间的条目数。有什么技巧或聪明的方法可以做到这一点吗?因为std::multimap有双向迭代器,我的理解是像std::distance这样的东西可以在O(N)时间内完成。其他详细信息:multimap的键是一个N元组。我正在尝试查找multimap中键的第一个元素为0的条目数。它们键的第一个元素的选项是0和1,而multimap使用严格的弱排序,其中键的第一个元素始终是最重要的。即,所有带0的元素出现在任何带1的元素之前。上下文:迭代器由equal_range返回,它以对数时间运行。明确地说,我想测量范围的长度。谢谢

c++ - STL 填充和转发迭代器

根据大多数C++引用资料,例如cplusplus.com,forwarditerators不需要可分配(我的意思是,尊重左值)。但是,对于一些需要写入值的STL算法,例如std::fill(还有std::generate等),规范使用前向迭代器:templatevoidfill(ForwardIteratorfirst,ForwardIteratorlast,constT&val);而等效的行为需要左值取消引用:templatevoidfill(ForwardIteratorfirst,ForwardIteratorlast,constT&val){while(first!=last)

c++ - 具有代理迭代器/引用和自动的容器

我正在实现一个容器,其代理迭代器/引用类型类似于std::vector并与以下问题发生冲突,我将继续用std::vector来举例说明(这个问题与std::vector无关!):#include#includeintmain(){usingnamespacestd;vectorvec={true,false,true,false};autovalue=vec[2];//expect:"vector::value_type"constauto&reference=vec[2];//expect:"vector::const_reference"static_assert(is_same:

c++ - 当迭代器(输入参数)通常不是 constexpr 时,constexpr 算法真的有用吗?

在c++20中提出,部分算法是constexpr。例如:templateboolall_of(InputItfirst,InputItlast,UnaryPredicatep);(sinceC++11)(untilC++20)templateconstexprboolall_of(InputItfirst,InputItlast,UnaryPredicatep);(sinceC++20)虽然我们知道迭代器通常不是constexpr。我认为这仅在constexpr容器的情况下有用。有人可以澄清我是否遗漏了什么以及我的理解是否正确吗? 最佳答案

c++ - 模板类内部类的映射迭代器的正确语法?

我想寻求有关正确语法的帮助,以声明一个std::map,其mapped_type是模板类的内部类。请在下面的代码中找到#if/#elseblock。“#if1”block具有包含内部类Inner的模板类Outer。Outer定义函数Func,它接受一个std映射,其mapped_type是Inner类型。#include#if1templateclassOuter{public:Outer(constC&c,constT&t){}virtual~Outer(){}classInner{public:Inner(){}Inner(Tt){}virtual~Inner(){}protect

c++ - C++ 迭代器是否持有对底层对象的引用?

我似乎找不到太多关于迭代器是否保留它们正在迭代的底层对象的信息。如果我创建了一个迭代器,那么提供它的对象超出了范围,迭代器的存在是否会阻止它被销毁?这里有一个非常简单的例子来说明这个场景://ThisclasstakesacopyofiteratorstousethemlaterclassData{public:Data(std::vector::iteratorstart,std::vector::iteratorend):start(start),end(end){}voidshow(){//Usethis->startandthis->endforsomepurpose}priv

c++ - vector<bool> 迭代器有任何保证吗?

cppreference表示vector的迭代器特化是实现定义的,许多不支持像ForwardIterator这样的特征(因此RandomAccessIterator)。cplusplus加个神秘的“最”:Thepointeranditeratortypesusedbythecontainerarenotnecessarilyneitherpointersnorconformingiterators,althoughtheyshallsimulatemostoftheirexpectedbehavior.我无法访问官方规范。vector是否保证任何迭代器行为?迭代器?更具体地说,如何编写

c++ - C++中的迭代器是指针吗?

C++中的迭代器是指针吗?我问的原因是似乎没有人完全理解迭代器是什么。这只是他们所说的“事物”或“值(value)”。但是迭代器只是简单地指向元素,指向它的位置。当我们取消引用它时,就像查看迭代器指向的内容一样。这个类比正确吗? 最佳答案 简短的回答是:指针是一种迭代器。指针因此可以用作迭代器。指针具有迭代器以外的属性。历史历史上,我们有C指针,当C++被发明时,它被改编成C++。指针代表内存中的一个位置,因此可以用作数组中的一个位置。后来,在1990年代,一种称为“迭代器概念”的思想被引入到C++中。“迭代器概念”与称为STL的库

c++ - 减少 begin() 迭代器然后再次增加它

这样的陈述是否符合标准?std::stringstr{"123"};autoit=str.begin();--it;++it;//Does*itpointtocharacter'1'now?我已经在g++4.7.2和clang++3.5上试过了-*it返回'1'。这是C++11中的标准行为吗? 最佳答案 不,这是无效的。这是未定义的行为,因为24.2.6[bidirectional.iterators]指出--it的后置条件是结果必须是可取消引用的。由于它在您的示例中指向begin()之前,因此不满足此条件,因此该代码是非法的。由于