草庐IT

std-ranges

全部标签

c++ - 为什么没有给 std::forward_list 一个 count() 成员函数?

我明白为什么std::forward_listdoesnothaveasize()memberfunction,因为O(1)版本会搞乱某些splice()的复杂性过载,并且由于O(N)version将与标准库的所有其他容器不一致。这也是事实std::list和std::forward_list已经有几个其他成员函数与中的表亲具有相同的语义标准库的一角(merge()、reverse()、remove()、remove_if()、unique()、sort())。那么为什么不是count()O(N)的成员函数提供给std::forward_list的复杂性具有返回std::distanc

c++ - qsort() vs std::sort,比较函数哲学差异

我想知道为什么在qsort(){Cversion}和std::sort()中有两种完全不同的方法来指定比较函数。qsort需要这样的比较函数:不知道为什么需要三种返回值-1、0、+1。intcomp(int*x,int*y){return*x-*y;}而std::sort()的比较函数对我来说看起来更一致,因为它是根据函数编写的,遵循不变量。即如果x小于y函数返回true,则x相对于y处于正确位置boolcomp(intx,inty){returnx当返回一个bool(或具有两个值0和1的int)更简单和干净时,为什么我们需要三个值-1,0,+1? 最佳答案

c++ - boost/STD/AKKA : How do I do actor programming in C++?

(改写问题和描述以便与S.O.兼容)奇怪的是,C++还没有被广泛采用、经过同行评审的actor模型库(按BOOST和STD的顺序)。我看到Theron,但它看起来像一个人和他的代码:无论它有多好,它都不是我希望生产代码依赖的东西。因此,如何在不使用未经证实的库的情况下使用C++进行Actor模型编程?我应该使用哪些BOOST类(class)?注意:我是在面对之前关于S.O.的一两个问题时问这个问题的。当人们搜索“actorC++”时就会出现,因为它们几乎没有吸引力。对于SEESHARP,有thisthread但对于C++,即使是获得中等关注度的问题也是如此thisguy,aquesti

c++ - std::pair 将 first 和 second 分配给语义命名的变量

有一个非常流行的问题是“std::pairvsstructwithtwofields”。但我有一个关于将first和second值重新分配给语义命名变量的问题。在常规情况下,我们有这样的事情:conststd::pairresult=processSomething();std::cout但是如果我们先将它们分配给引用变量呢:conststd::pairresult=processSomething();constint&numTotal=result.first;constint&numSuccessful=result.second;std::cout这使我们无需编写有关first

c++ - std::chrono::seconds 是轻量级的吗?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎与helpcenter中定义的范围内的编程无关。.关闭8年前。Improvethisquestion对于嵌入式项目,我想使用std::chrono::seconds来表示超时值,尤其是出于类型安全性的原因。这要求std::chrono::seconds可以从unsignedint类型快速构造,并且按值传递必须非常快。是这样吗?

c++ - std::map 的时间复杂度是多少

std::map的时间复杂度是多少?在最坏的情况下它会退化吗?还是由执行决定,我们不知道? 最佳答案 查找与log(N)成正比。在典型情况下(作为红黑树实现)比较次数最多可达两倍Log2N。插入通常也与Log2N成正比——但是当您插入一些已经有序的项目时有一个特殊规定1。在这种情况下,您可以为将要进行插入的位置指定一个“提示”。当该提示正确时,每次插入都是(分摊)O(1)而不是O(LogN),因此按排序顺序插入一系列项目是线性的而不是Nlog(N)。您指定的提示是指向要插入的项目之后位置的迭代器。例如,如果您在一个文件中有一些按排序

c++ - 在 C++ std::vector 之外的线程中启动可运行对象

我有一个C++11程序,它配置了许多可运行的对象,将它们放在std::vector中,然后在单独的线程中启动它们。不幸的是,当我遍历vector中的对象时,我只会为最后一个对象启动线程。我在以下测试代码中提炼了问题的核心(在OSX10.9.5上使用clang6.0使用clang++-std=c++11cpp_threadlaunch.cpp编译)).#include#include#include#includestd::mutexoutputlock;classagent{public:agent(std::stringname):m_name(name){};~agent(void

c++ - 为什么 std::queue 不是线程安全的?

主题说明了这一点。我不明白为什么std::queue(或一般来说:任何队列)本质上不是线程安全的,当没有像其他数据结构那样涉及迭代器时。根据一般规律至少有一个线程正在写入...另一个线程正在读取共享资源我应该在以下示例代码中遇到冲突:#include"stdafx.h"#include#include#includestructresponse{staticint&getCount(){staticinttheCount=0;returntheCount;}intid;};std::queuequeue;//generate100responseobjectsandpushthemin

c++ - priorC++11 中的 std::vector::begin() 是否等同于 C++11 中的 std::vector::data()?

是std::vector::begin()来自之前-C++11相当于std::vector::data()在C++11中?我问这个的原因是,在C++11之前,我曾经将std::vector::begin()视为指针,但在C++11之后,它不是,而且我不能转换为等效的指针。那么,我可以在C++11之后改用data()吗? 最佳答案 不,begin返回一个迭代器,而data返回一个指针。对于给定的实现,这些可能是同一件事,但您不应该指望这一点。 关于c++-priorC++11中的std::

c++ - 显式初始化 std::optional 时,我应该使用 nullopt 吗?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion安std::optional可以像这样初始化为脱离状态:std::optionaloi{nullopt};但也像这样:std::optionaloi{};赋值也是如此(oi={}或oi=nullopt)。除了个人喜好/美感之外,这两者之间是否存在差异,使我更喜欢其中之一?还是根本不重要?注意:我问的是我想显式初始化可选的情况,而不是默认初始化它(例如为了强调)。