草庐IT

rdbg_std_amd

全部标签

c++ - 在 shared_ptr 的容器上使用 C++ std::equal

我有一个std::shared_ptr的容器。我想使用std::equal比较两个容器。类A定义了operator==。我想使用其运算符==比较每个元素是否等效,而不是shared_ptr中定义的那个。我是否需要让一个函数或函数对象传递给equal?或者是否有一些内置的东西会更简单(比如中定义的东西)? 最佳答案 您将需要一个函数或一个函数对象或一个lambda表达式(因为您可以使用std::shared_ptr,所以您已经启用了C++0x的某些部分)。中没有任何内容帮助你,但有一些东西在提升:indirectiterator#in

C++:std::istream 检查 EOF 而不读取/消耗 token /使用运算符>>

我想测试std::istream是否已经到达结尾而不读取它。我知道我可以像这样检查EOF:if(is>>something)但这有一系列的问题。想象有许多(可能是虚拟的)方法/函数期望std::istream&作为参数传递。这意味着我必须做一些检查EOF的“家务”,可能使用不同类型的something变量,或者创建一些奇怪的包装器来处理调用输入法的情况.我需要做的就是:if(!IsEof(is))Input(is);IsEof方法应保证流不会因读取而改变,因此上面的行等同于:Input(is)关于在Input方法中读取的数据。如果没有通用的解决方案来表示和std::istream,有没

C++ 使用 std::map 计算实例/直方图

我见过类似下面的示例代码:std::strings="HelloWorld!";std::maph;for(std::string::const_iteratori=s.cbegin();i!=s.cend();++i){++h[*i];}assert(h['l']==3);这似乎依赖于在每个字母第一次出现时将值类型归零。即使使用像std::size_t这样没有默认构造函数将其重置为零的东西,也能保证这一点吗? 最佳答案 事实上,这就是map的工作原理:[]运算符正在发生变化,如果映射类型的对象不存在,它将创建然而。由于size_t

c++ - 如何在不显式定义函数的情况下创建函数的 std::vector?

我想创建一个std::vector对象(或任何其他标准或自定义容器类型),其中包含签名完全相同的自定义和任意函数的元素。应该是这样的://Definethefunctionsandpushthemintoavectorstd::vectorMyFunctions;MyFunctions.push_back(double(intn,floatf){return(double)f/(double)n;});MyFunctions.push_back(double(intn,floatf){return(double)sqrt((double)f)/(double)n;});//...MyF

c++ - 如何从 std::ifstream 将文件读入 unsigned char 数组?

所以通常我会做这样的事情:std::ifstreamstream;intbuff_length=8192;boost::shared_arraybuffer(newchar[buff_length]);stream.open(path.string().c_str(),std::ios_base::binary);while(stream){stream.read(buffer.get(),buff_length);//boost::asio::write(*socket,boost::asio::buffer(buffer.get(),stream.gcount()));}strea

c++ - std::vector 是否适合频繁调整大小?

我正在创建一个有小“粒子”的游戏。它们的数量变化非常频繁(每隔几秒),我想知道存储它们的最佳方式是什么。std::vector或std::deque对此更好吗?是否可以保留永远不会被使用的空间(在那个容器中)(我有上限)? 最佳答案 如果顺序无关紧要(我认为这无关紧要),您可以将它替换为vector中的另一个粒子,而不是移除一个粒子std::vectorparticles;当您删除索引i处的粒子时-只需用最后一个粒子填充空白区域:particles[i]=particles.back();particles.pop_back();如

c++ - 如何更改要反转的 std::map 的顺序?

有谁知道有什么方法可以将map顺序从“少”改为“多”吗?例如:有一个map称为test.我向其中插入一些条目:test["b"]=1;test["a"]=3;test["c"]=2;在map内部,顺序为(a,3)(b,1)(c,2).我希望它是(c,2)(b,1)(a,3).我怎样才能轻松做到这一点? 最佳答案 通过使用std::greater而不是std::less作为您的key。例如std::map>my_map;参见thereference 关于c++-如何更改要反转的std::m

C++ std::move 混淆

我对以下代码片段中发生的事情感到困惑。是move这里真的有必要吗?返回临时集的最佳且安全的方式是什么?setgetWords(){setwords;for(autoiter=wordIndex.begin();iter!=wordIndex.end();++iter){words.insert(iter->first);}returnmove(words);}我的调用代码只是执行setwords=foo.getWords() 最佳答案 首先,集合不是临时,而是本地。其次,返回它的正确方法是通过returnwords;。这不仅是您允许

c++ - Qt raw 与 std::shared_ptr

我注意到当在QT中用shared_ptr替换原始指针时,我的代码不再起作用。例如,如果不是QTreeWidgetItem*vItem(newQTreeWidgetItem(ItemTitle));我用std::shared_ptrvItem(newQTreeWidgetItem(ItemTitle));然后,要么程序崩溃,要么什么都没做(即使我使用.get()函数来获取来self代码后面共享的原始指针)。有谁知道可能是什么原因? 最佳答案 对Qt模型项使用共享指针会导致所有权冲突:QTreeWidget获取您传递给它的任何QTree

c++ - std::async 超时

有没有办法在std::async方法中实现超时,所以如果线程在指定的时间内没有完成,我希望这个调用超时并完成。我该如何实现此功能。 最佳答案 没有(标准的)方法可以进入线程并杀死它,无论如何这通常不是一个好主意。更简洁的选择是将开始时间和最长持续时间传递给函数,然后(可能随着计算的进行多次)检查当前时间减去开始时间是否太长。我会做这样的事情:#includetemplateclasstimeout{public:typedefClockclock_type;typedeftypenameclock_type::time_pointt