草庐IT

c++ - 如何将 std::queue 转换为 std::vector

我需要使用double队列,因为它作为有序容器具有良好的特性。我想将此队列传递给接受vector的类构造函数。如果我直接这样做,我会收到以下错误:candidateconstructornotviable:noknownconversionfrom'std::queue'to'std::vector&'for2ndargument如何将队列转换为vector? 最佳答案 模拟queue_like行为和vector-like行为的正确容器是std::deque。这样做的好处是:在双端队列的任意一端进行恒定时间插入和删除能够在不破坏双端

c++ - std::string 的串联引用是安全的吗?

我在看一些已经使用了很长时间没有问题的代码,下面我有一个简化版本:voidSomeClass::someMethod(conststd::string&arg1,conststd::string&arg2){//unrelatedcodeconststd::string&var=arg1+arg2;//varusedinotherconcatenations//varusedtoindexamap}我会假设var使用起来不安全,因为它引用了一个临时变量。这里的临时对象的生命周期太短或者它一直存活到方法结束? 最佳答案 constst

c++ - 覆盖标准函数

我想覆盖标准函数的行为,比如std::time。是否可以调用std::time并通过我的自定义函数进行路由? 最佳答案 一般来说,std命名空间是禁止使用的。向std命名空间添加新函数、重载、类或任何其他内容是**未定义的行为*。唯一异常(exception)是模板特化。您可以在std命名空间中提供函数的特化。一个经常这样做的函数是std::swap。 关于c++-覆盖标准函数,我们在StackOverflow上找到一个类似的问题: https://stack

c++ - boost::smart_ptr 可以用在 std 容器中吗?

scoped_ptr、shared_ptr等boost::smart_ptr可以用在std::map等std容器中吗?classSomeClass{std::map>a_map;};作为boost::smart_ptrcanbeusedforpolymorphism,在这种情况下也是如此吗?容器的销毁会触发子类的正确销毁吗? 最佳答案 scoped_ptr不能在标准容器中使用,因为它不能被复制(这是容器接口(interface)所要求的)。但是,可以使用shared_ptr。如果您不能使用C++11而您已经在使用boost,请考虑p

c++ - 在 std::vector::reserve 之后访问原始指针安全吗?

这有点牵强,但下面的代码“安全”吗(即保证不会导致段错误):std::vectorvec(1);//Ensuresthat&vec[0]isvalidvec.reserve(100);memset(&vec[0],0x123,sizeof(int)*100);//Safe?我意识到这很丑陋-我只想知道它在技术上是否安全,而不是“漂亮”。我猜它的唯一用途可能是忽略存储在给定索引之外的值。注意!HowcanIgettheaddressofthebufferallocatedbyvector::reserve()?涵盖相同的主题,但我更感兴趣的是这是否安全以及这样做是否存在陷阱。编辑:原来的

c++ - 为什么 ADL 优先于 'std namespace' 中的函数,但等于用户定义的命名空间中的函数?

我有两个ADL片段用于演示目的。这两个片段都已由VC10、gcc和comeauC++编译器编译,结果对于所有三个都是相同的。针对用户定义命名空间的using指令的ADL:#includenamespaceN{structT{};voidswap(T,T){}}namespaceM{voidswap(N::T,N::T){}}intmain(){usingM::swap;N::To1,o2;swap(o1,o2);}编译结果:errorC2668:'M::swap':ambiguouscalltooverloadedfunctioncouldbe'voidM::swap(N::T,N::

C++ std::map 或 std::set - 有效地插入重复项

我有一堆充满重复的数据,我想消除重复项。你知道,例如[1,1,3,5,5,5,7]变为[1,3,5,7]。看起来我可以使用std::map或std::set来处理这个问题。但是,我不确定(a)将所有值简单地插入容器中是否更快,或者(b)检查它们是否已经存在于容器中并且仅在不存在时才插入-插入是否非常有效?即使有更好的方法...您能建议一种快速的方法吗?另一个问题-如果我存储在其中的数据不像整数那样微不足道,而是一个自定义类,那么std::map如何设法正确存储(散列?)数据以便快速访问通过operator[]? 最佳答案 std::

c++ - 如何将实例成员函数作为回调传递给 std::thread

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:Startthreadwithmemberfunction我是C++的新手。我的经验主要是使用javascript和java。我在Lion上使用Xcode。下面的代码给我一个编译错误“必须调用对非静态成员函数的引用;你的意思是不带参数调用它吗?”classMyClass{private:voidhandler(){}public:voidhandleThings(){std::threadmyThread(handler);}};我还尝试了this->handler、&handler和其他变体,但都没有用。这段

c++ - 智能指针环绕惩罚。使用 std::map 进行内存

我目前正在进行一个性能至关重要的项目。以下是我对这个问题的一些疑问。问题1我的项目涉及大量boost::shared_ptr.我知道使用boost::make_shared在运行时创建共享指针很慢,因为它需要跟踪引用,所以有很多开销。我想知道如果已经创建了boost共享指针,那么这两个语句是否具有相同的性能,或者一个比另一个更快。如果常规指针更快并且我已经有共享指针,我有哪些选项可以调用共享指针指向的方法?statement1:sharedptr->someMethod();//herethepointerisasharedptrcreatedbyboost::make_shareds

当 push_back 新元素到 std::vector 时,C++ 引用发生变化

我不确定这是怎么回事-请告诉我下面的代码有什么问题。我修改了我的代码以将其简化为最简单的术语。有一个带有一堆MyNode对象的std::vector。第一步是获取对这些节点之一的数据元素之一的常量引用(Datam_data)——在下面的示例中,在插入第二个节点之前只有一个节点,如下所示:constcv::Data&currData=m_nodesVector[currIndex].GetData();MyNodenode(...);m_nodesVector.push_back(node);恰好在vector::push_back调用时,currData的值发生了变化!!我只是不明白。