草庐IT

boost-container

全部标签

c++ - boost 线程互斥数组

我的问题是,我有多个线程更新block矩阵。多个线程可能一次更新不相交的block,但通常可能存在竞争条件。现在矩阵使用单锁锁定。问题是,是否可能(如果可能,如何?)实现一个有效的锁数组,以便一次只能锁定矩阵的一部分。所讨论的矩阵可能会变得相当大,大约有50^2个block。我最初的猜测是使用动态分配vector/互斥量映射。这是好方法吗?使用多个条件变量会更好吗?有没有更好的方法? 最佳答案 使用单锁。但不是用它来保护整个矩阵,而是用它来保护std::set(或boost::unordered_set),它表示哪些block被“锁

c++ - 使用 boost multi_index_container 来保留插入顺序

我最初开始使用std::multimap来存储许多具有相同键的值,但后来我发现它不会保留具有相同键的值之间的插入顺序。Thisanswer声称可以使用boost::multi_index::multi_index_container来完成,但没有给出示例。查看文档,没有这种用法的示例,而且我无法弄清楚你应该如何使用这个东西。我已经开始期待较少使用的boost库提供糟糕的文档,但这很重要。任何人都可以向我指出一个教程或示例,说明它以我想要的方式使用,或者甚至可以自己提供一个示例吗? 最佳答案 您可以通过将boost::multi_in

c++ - 将 boost::lexical_cast 与 std::transform 一起使用

g++不喜欢:vectorx;x+=1,2,3,4,5;vectory(x.size());transform(x.begin(),x.end(),y.begin(),lexical_cast);错误信息是:error:nomatchingfunctionforcallto'transform(__gnu_cxx::__normal_iterator>>,__gnu_cxx::__normal_iterator>>,__gnu_cxx::__normal_iterator,std::allocator>*,std::vector,std::allocator>,std::allocat

c++ - 如何创建一个带有参数的函数,该参数将是 boost::bind 的结果?

所以我想创建一个像这样的函数:voidproxy_do_stuff(boost::bindreturn_here){return_here();//callstuffpasedintoboost::bind}我可以这样调用它:proxy_do_stuff(boost::bind(&myclass::myfunction,this,my_function_argument_value,etc_fun_argument));如何做这样的事情? 最佳答案 boost::bind的返回类型是boost::function类型。见下文:voi

c++ - boost MPL : Call a (member) function only if it exists

我有一个类A,它有一个模板参数T。有些用例中类T提供函数func1(),有些用例中T不提供它。A中的函数f()应该调用func1(),前提是它存在。我认为这应该可以通过boostmpl实现,但我不知道如何实现。这里有一些伪代码:templateclassA{voidf(Tparam){if(T::func1isanexistingfunction)param.func1();}};如果是else-case会更好:templateclassA{voidf(Tparam){if(T::func1isanexistingfunction)param.func1();elsecout

c++ - 复制 boost::function 是否也复制闭包?

假设我有这样一个函数:voidsomeFunction(constExpensiveObjectToCopy&);如果我创建一个boost::functionoutifit,该函数将在其闭包中存储它自己的对象的克隆拷贝:boost::functionf=boost::bind(someFunction,x);//现在,如果我开始传递f,boost::function复制构造函数每次都会再次复制该对象,还是每个函数共享同一个闭包?(即像这样)boost::functionf2=f;callSomeFunction(f);etc. 最佳答案

c++ - 传递 `boost::variant` 数据类型的优雅方法

我需要找到一个更好的解决方案来将数据类型传递给boost::variant以便函数可以优雅地检索存储的变量类型。我已经提出了一个适合我的实现,但我担心有更好的方法。//filename:p192.cpp#include#include#include#include#includeusingnamespacestd;enumTypePassIn{INT_TYPE,DOUBLE_TYPE,STRING_TYPE,PERSON_TYPE,LAST_TYPE=PERSON_TYPE};structPerson{Person(int_age,string_name):age(_age),nam

c++ - 是否允许递归 boost spirit 语法?

我正准备为一种类似mathematica的语言编写一个解析器,并且发现有时调用我的spirit语法来解析表达式的子部分会很好。即如果我要解析a+b*c+d在查询'+'符号时,在'b*c'部分调用parse()会很方便。在使用我的语法的相同实例时可以这样做吗?(语法参数将是'*this')虽然我还不确定这是否是完成此特定任务的最佳方法,但我发现这个问题很有趣,因为我在文档中找不到任何内容。如果我使用这种技术,显然我不应该依赖类局部变量或全局变量。但我想知道它是否主要是spirit设计所允许的。编辑:我的语法实例如下所示:classMyGrammar:publicboost::spirit

C++ boost : Split function is_any_of()

我正在尝试在以下函数中使用boost/algorithm/string.hpp中提供的split()函数:vectorsplitString(stringinput,stringpivot){//Pivot:e.g.,"##"vectorsplitInput;//Vectorwherethestringissplitandstoredsplit(splitInput,input,is_any_of(pivot),token_compress_on);//SplitthestringreturnsplitInput;}下面的调用:stringhello="Hieafds##addgaeg

c++ - STL 迭代器 : container. 结束()

我正在阅读一些关于STL的文档,那里写到end()函数返回容器最后一个元素旁边字节的迭代器。我想知道,如果容器占用了整个可用内存的最后一个字节怎么办。那会发生什么? 最佳答案 C++内存模型保证您始终可以形成指向数组最后一个元素之后的元素的指针。如果没有,系统将不允许您在此位置分配对象,或者它会环绕。另外,请注意,这对于数组来说是一个潜在的问题,因为其他容器可以使用迭代器类型,这些迭代器类型以其他合适的形式处理结束位置:它们完全控制增量操作的工作方式。 关于c++-STL迭代器:cont