草庐IT

-std=gnu99

全部标签

c++ - 从带有原始指针的 vector 中删除 std::unique_ptr 的最佳方法?

所以我有一个像这样的vector:std::vector>myVector;然后我有另一个vector,其中包含SomeClass的原始指针:std::vectormyOtherVector;如果myOtherVector中有一个元素,它也会在myVector中,所以我想遍历myOtherVector中的每个元素并删除来自myVector的相同元素。然后清除vector。这是我想出的:for(size_ti=0;i这会产生编译时错误,因为myVector拥有唯一的指针,但我给remove()函数一个原始指针。这是我需要帮助的地方,因为我不知道解决这个问题的正确方法是什么。我将行更改为:

c++ - 如何从 std::list 实现 O(1) 删除

问题是使用std::list实现O(1)列表项删除的推荐方法是什么?通常,当我选择一个双向链表时,我希望能够在O(1)时间内从一个列表中删除一个元素,然后在O(1)时间内将它移动到另一个列表中。如果该元素有自己的prev和next指针,那么就没有真正的技巧来完成这项工作。如果列表是双向链接的循环列表,则删除不一定需要知道包含该项目的列表。根据Iteratorinvalidationrules,std::list迭代器非常耐用。因此,在我看来,在我自己的项目上使用std::list时,我想要得到的行为是在我的类和包含列表中存储一个迭代器。classItem{typedefstd::sha

c++ - std::search 是否有一个函数类似于 std::count 对 std::find 的函数?

如果标题听起来很奇怪,这里有另一种解释:如果我有一个范围a,我想计算另一个范围b在范围a中出现了多少次,是否有一个std::函数来做呢?如果不是,是否有一种简单的方法(当然我可以使用std::search手动循环-我说的是更优雅的东西)? 最佳答案 我认为您需要构建自己的。以下是我想到的实现方式。templatesize_tsubsequence_count(Iterator1haystack_begin,Iterator1haystack_end,Iterator2needle_begin,Iterator2needle_end)

c++ - 为什么 std::stoi 和 std::array 不能用 g++ c++11 编译?

过去几个月我一直在学习C++和使用终端。我的代码使用g++和C++11编译和运行良好,但在过去的几天里它开始出错,从那以后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C++标准。我首先得到的错误与头文件中的#include有关。不知道为什么会这样,但我通过使用boost/array来绕过它。我无法解决的另一个错误是std::stoi。array和stoi都应该在C++11标准库中。我编写了以下简单代码来演示发生了什么:////stoi_test.cpp////Createdbyecg//#include#include//stoishouldbeinhereintmain

c++ - 使用 std::sort 对字符串进行排序,使大写字母位于小写字母之后

我想对一个vector进行排序,使大写字母跟在小写字母之后。如果我有类似的东西ThisisatestthisisatestCatscatsthisthing我希望输出是catsCatsthisisatestThisisatestthisthing标准库排序会输出CatsThisisatestcatsthisisatestthisthing我想将谓词传递给std::sort,以便它比较我作为参数传递的字符串的小写版本。boolcompare(std::stringx,std::stringy){returnlowercase(x)我尝试降低函数中的每个字符,然后进行比较,但没有成功。我想

c++ - 如何在 std::set<int*> 中找到 const int*?

首先,我有一套std::setmy_set;然后,我有一个函数来检查my_set中是否存在一个特定的int指针p,它只是返回true如果it指针存在于其中,否则为false。由于函数不修改被引用的int,所以很自然的把指针当作constint*,即boolexists_in_my_set(constint*p){returnmy_set.find(p)!=my_set.end();}但是,当我尝试编译代码时,出现以下错误:error:invalidconversionfrom'constint*'to'std::set::key_type{akaint*}'[-fpermissive]

c++ - std::[tr1::]ref 和 boost::ref 之间的混淆

注意:这是GCC4.1.2。我们在专有的嵌入式平台上。我们无法更新到新的编译器。所以C++03+TR1是。我们在某个地方有这样一个函数:templatevoidfoo(constboost::any&x){bar(boost::any_cast(x));}随后在绑定(bind)表达式中使用:std::tr1::bind(&foo,_1);这会产生以下错误:error:callofoverloaded'ref(constboost::any&)'isambiguousnote:candidatesare:std::tr1::reference_wrapperstd::tr1::ref(_

c++ - 带有 std::shared_ptr 的 QVariant

我有以下问题,我正在使用Q_DECLARE_METATYPE(std::shared_ptr);qRegisterMetaType>();QMetaType::registerComparators>();使用std::shared_ptr与例如QList模型。我需要一种行为QVariant::fromValue(std::shared_ptr(newint(5)))==QVariant::fromValue(std::shared_ptr(newint(5)))是真的。自std::shared_ptr::operator==()以来,我上面的代码在这里返回false比较原始指针。是否

c++ - 自定义异常层次结构。来自 std::exception 和 std::bad_alloc 的可怕钻石

我在自己的异常层次结构中遇到继承问题。Exception类具有很好的功能(回溯、日志记录等),因此它是我处理任何异常的基类。正如我在许多网页中看到的那样,它继承自std::exception。此外,我正在使用一个单元测试框架来报告任何std::exception被意外抛出。但归根结底,这只是为了方便。然后,我有一个新的OutOfMemoryException类,它将由自定义new_handler抛出。该类继承自Exception,但也继承自std::bad_alloc以兼容现有代码。我猜这更重要,因为new将不再抛出std::bad_alloc。这里的问题很明显:因为std::bad_

c++ - 编译器在初始化大型 std::arrays 时挂起

我需要初始化一个非常大的多维std::array数据:classThing;classWorld{public:World():space{nullptr}{};~World()=default;private:staticunsignedintconstsize=1000;std::array,size>,size>,size>space;};如果您尝试实例化它,G++4.8.2会阻塞:它会消耗所有可用内存并且不会返回。也就是说,编译器挂起,我从来没有得到可执行文件。这是为什么?请注意,clang++没有问题。注意:我完全意识到将这么多数据放在堆栈上可能会溢出。在堆上初始化它的最佳方