草庐IT

std-ranges

全部标签

c++ - 如何 std::find 使用比较对象?

我对std::find的接口(interface)感到困惑。为什么它不用Compare对象来告诉它如何比较两个对象?如果我可以传递一个Compare对象,我可以使下面的代码工作,我想在其中按值进行比较,而不是直接比较指针值:typedefstd::vectorVec;Vecvec;std::string*s1=newstd::string("foo");std::string*s2=newstd::string("foo");vec.push_back(s1);Vec::const_iteratorfound=std::find(vec.begin(),vec.end(),s2);//

c++ - 通过插入保持 std::list 迭代器有效

注意:这不是我应该“使用列表还是双端队列”的问题。这是一个关于迭代器在面对insert()时有效性的问题.这可能是一个简单的问题,我太笨了,看不出正确的方法。我正在实现(无论好坏)网络流量缓冲区作为std::listbuf,并且我将我当前的读取位置保持为迭代器readpos.当我添加数据时,我会做类似的事情buf.insert(buf.end(),newdata.begin(),newdata.end());我现在的问题是,如何保留readpos迭代器有效吗?如果它指向旧buf的中间,那么它应该没问题(由std::list的迭代器保证),但通常我可能已经读取并处理了所有数据并且我有re

c++ - std::cin 上的 std::getline

是否有充分的理由:std::stringinput;std::getline(std::cin,input);getline调用不会等待用户输入?cin的状态是否以某种方式搞砸了? 最佳答案 很可能您在读取一些其他数据后尝试读取字符串,例如int。考虑输入:11isaprime如果你使用下面的代码:std::cin>>number;std::getline(std::cin,input)getline只会读取11之后的换行符,因此您会觉得它没有等待用户输入。解决这个问题的方法是使用虚拟getline来消耗数字后的新行。

c++ - 为什么在将 std::vector 与默认构造函数一起使用时会出现异常行为?

总结我最近看到了一些关于std::vector的问题,出于好奇,我一直在研究它们。我从来没有真正使用过STL,但我知道你可以使用vector来处理对象数组的分配,而且我可以发誓有一种方法可以使用默认构造函数在vector是创建。的确,这个问题Initializingastd::vectorwithdefaultconstructor处理使用复制构造函数和默认值与仅使用默认构造函数初始化vector。但是,由于我一直在VisualStudio2010中使用C++控制台应用程序项目进行一些试验,因此我没有得到与此解释一致的结果。根据对上述问题(givenhere)的回答中的评论之一,如果您

c++ - 什么是 'valid' std::function?

这里:http://en.cppreference.com/w/cpp/utility/functional/functionoperatorbool描述为:“检查存储的可调用对象是否有效”。大概默认构造的std::function是无效的,但这是唯一的情况吗?另外,它如何检查它是否有效?operator()引发std::bad_function_call的情况是否正是对象无效的情况? 最佳答案 它写得不好,你的困惑是有道理的。“有效”的意思是“有目标”。std::function在被分配了一个函数时“有一个目标”:std::fun

c++ - 使用值为 std::shared_ptr 的映射是否是具有多索引类列表的良好设计选择?

问题很简单:我们有一个类(class),成员有a,b,c,d...我们希望能够通过为a或b或c提供当前值来快速搜索(键是一个成员的值)并使用新值更新类列表...我想拥有一堆std::map>.1)这是个好主意吗?2)boostmultiindex是否在各个方面都优于这个手工制作的解决方案?出于简单性/性能方面的原因,PSSQL是不可能的。 最佳答案 BoostMultiIndex可能有一个明显的缺点,即它会尝试在集合的每次突变后使所有索引保持最新。如果您的数据加载阶段包含许多单独的写入,这可能会造成很大的性能损失。BoostMult

c++ - 具有相同散列值的值是否在同一个 std::unordered_map 桶中?

如果std::unordered_map的两个键具有相同的哈希值,标准是否保证它们将进入同一个桶?根据模板相等谓词,我们假设键不相等,它们仅具有相同的哈希值。奖励问题:如果相同的散列并不意味着相同的桶,那么能够单独遍历桶的目的是什么? 最佳答案 具有相同哈希值的对象被无序关联容器放入同一个桶中。因此,两个相等的对象必须具有相同的哈希值。23.2.5第8段:Theelementsofanunorderedassociativecontainerareorganizedintobuckets.Keyswiththesamehashcod

c++ - std::ifstream::read 或 std::ofstream::write 参数为零?

是否完全可以(=根据标准定义明确的行为)调用:mystream.read(buffer,0);或mystream.write(buffer,0);(当然不会读取或写入任何内容)。我想知道在调用这两个函数之一之前是否必须测试提供的大小是否为空。 最佳答案 是的,行为是明确定义的:两个函数都将完成未格式化输入/输出函数的Action(构造哨兵,如果设置了eofbit则设置failbit,必要时刷新绑定(bind)流),然后它们将得到对此条款:§27.7.2.3[istream.unformatted]/30Charactersareex

c++ - g++ -std=c++0x 和兼容性

我正在使用g++4.4在Linux上编译一个共享库。如果可以的话,我想在库中使用一些C++11功能,但我无法更新编译器的版本,也无法为我的库的用户要求任何特殊的编译器开关。我有两个问题,但找不到明确的答案。如果我使用-std=c++0x或-std=g++0x编译共享库,我是否可以保证使用我的库的程序不需要这些开关(前提是我没有头文件中的c++0x特性)?这似乎有效,但我不想在注册过程中遇到一些微妙的问题。g++4.4中的C++11标准库非常不完整。由于许多标准库仅包含头文件,而gnu的头文件通常充满版本ifdef,我认为可能有一种方法可以使用至少libstdc++中的头文件的更新版本。

c++ - __glibcxx_function_requires 和 __glibcxx_requires_valid_range 宏是如何工作的?

templateinline_Tpaccumulate(_InputIterator__first,_InputIterator__last,_Tp__init,_BinaryOperation__binary_op){//conceptrequirements__glibcxx_function_requires(_InputIteratorConcept)__glibcxx_requires_valid_range(__first,__last);for(;__first!=__last;++__first)__init=__binary_op(__init,*__first);r