草庐IT

any_iterator

全部标签

c++ - 将 std::pair 迭代器转换为 boost::iterator_range

我有一个std::multimap,我想从equal_range创建一个boost::iterator_range。我在文档中找不到简单的方法,所以我尝试了以下方法:typedefstd::multimapMap;Mapmap;...boost::iterator_ranger(map.equal_range(2));令人惊讶的是,它有效(使用GCC4.1.2)。我很好奇它是如何工作的。我发现iterator_range构造函数没有重载可以执行此操作,并且multimap::iterator_range显然没有可以返回Boost范围的重载。 最佳答案

c++ - 获取指向 boost::any 内容的 void* 指针

我正在使用一个外部库,它有一个接受void*的方法我希望这个void*指向包含在boost::any对象中的对象。是否可以获取到boost::any对象的内容地址?我正在尝试使用myAny.content但到目前为止运气不好!我希望dynamic_cast或unsafe_any_cast的某种组合能满足我的需求。谢谢! 最佳答案 您可以使用boost::any_cast获取指向底层类型的指针(前提是您在编译时知道它)。boost::anyany_i(5);int*pi=boost::any_cast(&any_i);*pi=6;vo

c++ - 英特尔 AVX 内在函数 : any compatibility library out?

是否有任何英特尔AVX内部函数库?我正在寻找类似于“sse2mmx.h”header的东西,如果SSE2整数内在函数在编译时不可用,它会回退到MMX内在函数。因此,如果我有类似的AVX库,我可以为新硬件编写优化代码,在AVX扩展不可用的情况下,它几乎可以达到最佳速度。谷歌搜索到目前为止没有多大帮助:( 最佳答案 英特尔提供了一个AVXemulationheader.我没有尝试过,但引用了链接的文章“AVX仿真头文件使用内部函数来扩展IntelSSE4.2之前的Intel指令集。您的开发环境和硬件需要SSE4.2支持,以便使用AVX仿

c++ - 微优化 : iterating with local variable vs. 类成员

我认为如果我将迭代变量声明一次作为类成员,我会节省一些时间:structFoo{inti;voidmethod1(){for(i=0;i然而,这似乎快了20%structFoo{voidmethod1(){for(inti=0;i在这段代码中voidloop(){//Arduinoloopsfoo.method1();foo.method2();}您能解释一下性能差异吗?(我需要在Arduino上运行许多简单的并行“进程”,这种微优化会产生影响。) 最佳答案 当您在循环内声明循环变量时,它的范围非常狭窄。编译器可以随时将其保存在寄存

c++ - std::any_of 与顺序执行策略一起使用时是否保证迭代顺序?

我有一个过滤函数列表。如果这些函数中的任何一个返回“true”,我就不应该进一步处理事件。std::any_of似乎适合这个用例,但我希望保证过滤器函数按照它们添加到我的列表中的顺序被调用(因为它们可能有副作用)。因此,如果我使用std::any_of,我需要知道它调用过滤器函数的顺序是确定的,从列表的begin()到end()。我检查了std::any_of上的C++标准和顺序执行策略,但没有提到顺序保证。我没有在cppreference上找到关于订单保证的提及,也没有在stackoverflow上找到足够相似的已回答问题。我的结论是没有订单保证。虽然大多数编译器可能会按我的顺序处理

c++ - 在 vs2008 SP1 中禁用检查迭代器时出现问题 (_HAS_ITERATOR_DEBUGGING=0)

当我尝试禁用已检查的迭代器时,在Debug模式下运行vs2008SP1时遇到了一些问题。以下程序重现了该问题(字符串析构函数崩溃):#define_HAS_ITERATOR_DEBUGGING0#includeintdo_stuff(std::stringconst&text){std::string::const_iteratori(text.end());return0;}intmain(){std::ostringstreamos;os我找到了similarpost在gamdev.net上讨论了在vs2005中遇到这个问题。该帖子中的示例程序在2008SP1上按原样为我编译-但是

c++ - 如何使用两个函数,一个返回迭代器,另一个返回 const_iterator

所以我有一个名为find的函数,它有两个版本:templatetypenamebtree::iteratorbtree::find(constT&elem){//Implementation}另一个是const_iterator版本:templatetypenamebtree::const_iteratorbtree::find(constT&elem)const{//Implementation}在我做的时候在我的测试文件中btree::iteratorit=myTree.find('M');一切正常,但是当我使用const_iterator版本时:btree::const_iter

c++ - 如何设计符合标准的 std::any 实现的存储?

标准工作草案(n4582、20.6.3、p.552)对std::any的实现提出了以下建议:Implementationsshouldavoidtheuseofdynamicallyallocatedmemoryforasmallcontainedobject.[Example:wheretheobjectconstructedisholdingonlyanint.—endexample]Suchsmall-objectoptimizationshallonlybeappliedtotypesTforwhichis_nothrow_move_constructible_vistrue.

c++ - boost any_range 性能:std::prev(iterator) 与 --iterator

我最近开始喜欢免费功能std::next和std::prev显式复制和递增/递减迭代器。现在,我在一个非常具体的案例中看到了奇怪的行为,如果能帮助揭开它的神秘面纱,我将不胜感激。我有一个在boost::any_range上运行的内插/外推函数一些X_type.范围类型的完整定义是:boost::any_rangeany_range,在这种特殊情况下,是从iterator_range分配的持有指向constX_type的两个指针,作为X_type大约一半的Viewdata()面积vector.在MSVC2010中编译我的应用程序,一切正常。在MinGWg++4.7.0中编译相同的代码,它

c++ - const_iterator<T> 和 iterator<const T> 有什么区别?

假设我正在实现一个集合,比如std::vector.我需要实现iterator和const_iterator,但一旦我做了iterator可以const_iterator不只是实现为iterator(其中T是集合中包含的类型)?肯定有一些原因导致这行不通,因为关于如何在实现iterator时重用代码存在一百万个问题。和const_iterator但他们都没有说“只需使用constT作为类型”。 最佳答案 std::iterator_traits::value_type应该是T对于const_iterator,但是constT1表示i