草庐IT

c++ - 什么时候在 C++ 程序的开头使用 '#include <string>'?

我对#include的使用感到困惑在程序的开始。例如,在下面的代码中,我不使用#include但该函数在运行时仍会打印出字符串“Johnny'sfavoritenumberis”。#includeusingnamespacestd;voidprintVariable(intnumber){cout但是,在下面的代码中,它确实包含#include.#include#includeusingnamespacestd;classVar{public:voidsetName(stringx){name=x;}stringgetName(){returnname;}private:stringn

c++ - STL priority_queue<pair> 与 map

我需要一个优先级队列来存储每个键的值,而不仅仅是键。我认为可行的选择是std::multi_map因为它按键顺序迭代,或std::priority_queue>因为它在V之前在K上排序。除了个人偏好之外,我有什么理由更喜欢另一个吗?它们真的一样吗,还是我漏掉了什么? 最佳答案 优先级队列最初是在O(N)时间内排序的,然后以降序迭代所有元素需要O(NlogN)时间。它存储在std::vector中在幕后,所以在大O行为之后只有很小的系数。不过,其中一部分是在vector内部移动元素。如果sizeof(K)或sizeof(V)很大,会慢

c++ - set <T> vs set <T, comparator> (C++ 多态性)

为什么这段代码structThingComparator{...}staticvoidBlah(set&things){...}...setthings;Blah(things);编译失败并出现以下错误(VisualStudio2010):errorC2664:'Blah':cannotconvertparameter1from'std::set'to'std::set&'我的C++知识显然是有限的,但我希望听到喇叭声宣布多态骑士骑在他可信赖的骏马上,但我只能听到马屁和悲伤的长号:-( 最佳答案 std::set声明asfollow

c++ - std::stack<int> 具有最大功能?

如何实现stack使用最大操作,最大函数的复杂度为O(1)并且它使用O(n)额外内存? 最佳答案 想法是通过在堆栈中使用对来跟踪最大值。如果你向堆栈中插入一些东西,你会相应地更新最大值。classStack{private:stack>s;public:boolempty()const{returns.empty();}intmax()const{assert(empty()==false);returns.top().second;}intpop(){intans=s.top().first;s.pop();returnans;}

c++ - 带有受歧视 union 和可选<>的奇怪段错误

我想知道在这个使用std::experimental::optional和union类型的简单示例中,是什么导致了段错误。奇怪的是,段错误在clang和gcc中都发生了,但是发生在两个不同的地方。我也对从下面的日志中看到的大量复制和破坏感到困惑,想知道是否有更好/惯用的方法来避免这么多明显冗余的操作?在这种情况下,假设这里的所有对象都是按值传递和访问的,是否有助于将所有构造函数切换为采用右值引用并在所有地方使用std::move?#include#include//https://github.com/akrzemi1/Optional#include"Optional/optiona

替换&lt; pre&gt;用&lt; br&gt;标记在JavaScript中标记

我有这样的html字符串Allsettogoin.Finallyin.Yupthistextispresentinsideofthepretag.我想用&lt;替换pretab;lt;br&gt;标签。最终结果应该是。Allsettogoin.Finallyin.Yupthistextispresentinsideofthepretag.到目前为止,我尝试了什么?我尝试使用正则表达式并创建了看起来像这样的模式:-/is(?=.*)/g哪个只能找到以前的“是”标签。我也想在此中再包括一个条件,即如果之后应该标签。在https://regex101.com/r/qw7tz1/5如何用&lt;br/

c++ - Derived 到 MatrixBase<Derived> 转换背后的故事

当您将矩阵对象作为MatrixBase引用传递给函数时会发生什么?我不明白幕后到底发生了什么。示例函数代码如下:#include#includeusingnamspaceEigen;templatevoidprint_size(constMatrixBase&b){std::coutm;m它给出了以下输出:size(rows,cols):4(2,2)11616比1的差异从何而来?还有为什么需要转换?提前致谢! 最佳答案 sizeof在编译时进行评估,因此它与声明的(静态)对象类型有关。b类型为MatrixBase(忽略引用,就像si

c++ - atomic<T*> 总是无锁的吗?

在我的MAC操作系统上,atomic是无锁的。#include#includeintmain(){std::cout().is_lock_free()我想知道是否atomic总是无锁?有引用介绍吗? 最佳答案 Thestandardallowsimplementinganyatomictype(withexceptionofstd::atomic_flag)tobeimplementedwithlocks.即使平台允许某些类型的无锁原子,标准库开发人员也可能没有实现它。如果您需要在使用锁时实现不同的东西,可以在编译时使用ATOMIC

c++ - boost::shared_ptr<const T> 到 boost::shared_ptr<T>

我想从boost::shared_ptr中转换常量,但我boost::const_pointer_cast不是答案。boost::const_pointer_cast想要一个constboost::shared_ptr,不是boost::shared_ptr.让我们放弃强制性的“你不应该那样做”。我知道...但我需要这样做...那么最好/最简单的方法是什么?为了清楚起见:boost::shared_ptrorig_ptr(newT());boost::shared_ptrnew_ptr=magic_incantation(orig_ptr);我需要知道magic_incantation

c++ - 仅使用 < 运算符检查整数是否在范围内

我需要编写一些代码来检查给定的整数是否在某个范围内。(范围由一对整数表示。)所以,给定一个范围r定义为std::pair,和一个测试整数n,我想说:if(n>=r.first&&n问题是,我需要使用std::less比较仿函数来执行此操作,这意味着我只能使用小于运算符。我正在尝试想出等效的表达式。我很确定我是正确的,但我并不完全有信心。我想到的表达方式是:(!cmp(n,r.first)&&!cmp(r.second,n))哪里cmp是std::less的实例我做对了吗? 最佳答案 轮询他人并不是验证正确性的最佳方式。:)相反,请考