草庐IT

c++ - 带有自定义模板的 STL 迭代器

我有以下模板方法,templatevoidClass::setData(vectordata){vector::iteratorit;}我收到以下编译错误(XCode/gcc)error:expected`;'before'it'我发现其他人也有类似的问题here(readdowntoseeit'sthesameeventhoughitstartsoutwithadifferentissue)但他们似乎已经通过更新VisualStudio解决了。这让我猜测这是一个编译器问题,它应该编译,对吗?通过从0到size的索引进行迭代是可行的,但这不是我更愿意实现此功能的方式。还有另一种解决方法

c++ - 解锁对 STL vector::size 安全性的访问

我在STLvector上有几个作者(线程)和一个读者。正常的写入和读取是互斥保护的,但我想避免我拥有的循环上的争用,我想知道vector::size是否足够安全,我想这取决于实现,但因为通常vector动态内存是用于存储项目存储大小的内存不应在重新分配期间失效。我不介意有误报,在size>0之后,我实际上会锁定并再次检查,因此如果在另一个线程写入时读取size()不会出现段错误,它对我来说应该足够安全。 最佳答案 我不知道并发读取和写入整数段错误的实现(尽管C++03标准不禁止这样做,我不知道POSIX是否禁止)。如果vector使

c++ - Xcode STL C++调试编译报错

我有一些文件编写代码按预期工作,但在Debug模式下打印错误,在Release模式下没有输出错误。代码:#include#include#include#includeusingnamespacestd;intmain(intargc,char*constargv[]){stringcppfilename;std::cout调试输出:Pleaseenterthefilenametocreate:Running…myfileFileIO(5403)malloc:***errorforobject0xb3e8:pointerbeingfreedwasnotallocated***setab

c++ - STL priority_queue 复制比较器类

我正在尝试使用自定义比较器创建优先级队列:std::priority_queue,MyComparator>pq;我的问题是MyComparator有一个存储附加状态的方法。因为MyComparator被复制到优先级队列(据我所知),所以我无法在优先级队列持有的MyComparator实例上调用此方法。有没有办法:获得对优先级队列持有的MyComparator实例的访问权,或者:以某种方式通过引用传递原始MyComparator实例 最佳答案 STL容器中使用的比较对象以及STL算法中使用的谓词必须是可复制的对象和方法,算法可以随意

c++ - 这个指针的使用

我有一个关于“this”的用法的问题。假设我有两个类A和B;它们的大致轮廓如下:classA{public:...voidAddB(B*b){//insertsBintothevectorv}private:std::vectorv;};classB{public:...voidfoo(void){...//AddsitselftothequeueheldinAa.AddB(this);}};以这种方式使用“this”通常是不好的做法吗?感谢您的帮助。 最佳答案 不,只要您在所有权和删除方面小心谨慎,这没有任何问题。

c++ - STL - 在 <algorithm> 中使用成员函数或函数?

我想到这个问题是因为我得到了以下问题的一些答案,表明我可以使用vector::assign或copy用back_insert_iteratorhere.我的问题是,使用一种方法相对于另一种方法的优缺点是什么? 最佳答案 assign覆盖vector的内容,其中copywithback_insert_iterator执行push_back在vector上,从而保留其内容。编辑:如果问题是通用的(即是使用容器中定义的成员函数还是算法),我更喜欢使用成员函数,因为它可能已针对特定问题进行了优化与通用算法相比的容器。

c++ - std::priority_queue:自定义排序而不定义比较器类

我想要一个自定义排序的优先级队列,但我很懒惰,不想定义一个实现operator()的比较器类。我真的很想编译这样的东西:std::priority_queue,boost::bind(some_function,_1,_2,obj1,obj2)>queue;其中some_function是一个带有四个参数的bool返回函数,第一个和第二个是队列的整数,最后两个是计算排序所需的一些对象(const引用)。(error:‘boost::bind’cannotappearinaconstant-expression)但这不能编译。甚至更简单std::priority_queue,&compa

c++ - 在 map 上使用 find_if 按值查找

我有一个有map的类(class)。我需要通过搜索特定值而不是键来在map中找到迭代器。使用成员函数谓词IsValueFound,正在尝试这个。classA{public:voidfindVal();private:intstate;mapexmap;boolIsValueFound(pairitr){returnstate==itr.second;}};voidA::findVal{itr=find_if(exmap.begin,exmap.end,mem_fun1_ref(&A::IsValueFound));}我遇到编译错误。我不确定这些函数适配器的语法是什么。请帮忙。编辑:抱歉

c++ - 返回标准容器会导致容器内容的拷贝吗?

如果我有一个返回STL容器的函数,我是否会得到标准容器全部内容的拷贝?例如这是:voidFoo(std::vector*string_list);比这更好:std::vectorFoo();容器里装的东西重要吗?例如会返回这样的容器:structbuzz{inta;charb;floatc;}std::mapFoo();比这更昂贵的操作:std::mapFoo();谢谢,保罗H编辑:这是C++03。遗憾的是,C++0x解决方案是NotAcceptable。编辑2:我正在使用MicrosoftVisualStudio2008编译器。 最佳答案

c++ - STL 或 BOOST 是否提供任何干净的方法来获取排序顺序而无需重新排序原始序列?

例如,我想找到vector的排序顺序,而不需要重新排序vector。我可以想到几种方法来做到这一点,我想知道我是否缺少一些内置的STL或BOOST方法来做到这一点。我想如果该功能可用,代码最终会看起来像这样:std::vectorunsortedSeq;unsortedSeq.push_back(1.1);unsortedSeq.push_back(1.0);unsortedSeq.push_back(0.5);unsortedSeq.push_back(1.2);unsortedSeq.push_back(1.15);std::listsortOrder;std::sort_indi