草庐IT

regex_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::regex vs std::regex - 找不到 empty() 方法?

将boost::regex替换为std::regex因为我们在公司使用gcc4.6我遇到了一个问题empty()该类的方法-它基本上没有从boost::regex进入std::regex类。我不确定这是gcc的问题还是这个方法根本没有进入C++11标准,但那段代码在很大程度上取决于这个特性。所以问题是-在C++11std::regex中是否有一种方法来检查是否设置了表达式,或者我应该坚持使用boost::regex我的余生? 最佳答案 empty()很久以前就从std::regex中删除了。N1507(2003-09-16)是建议将

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++ - 在 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++ - boost::regex_search 可以在 wstring 上完成吗?

这是我尝试过的:std::wstringextractText(std::wstringline){std::wstringtext;boost::regexexp("^.*?PRIVMSG#.*?:(.+)");boost::smatchmatch;if(boost::regex_search(line,match,exp)){text=std::wstring(match[1].first,match[1].second);}returntext;} 最佳答案 使用wregex和wsmatch

c++ - fatal error LNK1104 : cannot open file 'libboost_regex-vc90-mt-gd-1_42.lib'

我正在尝试在我的程序中使用boost正则表达式问题是我得到这个错误......我所做的唯一安装步骤是添加:“C:\ProgramFiles\boost\boost_1_42”进入附加包含目录...我正在使用VS2008...尝试实现这个:#include#include#includeusingnamespacestd;intmain(){std::strings,sre;boost::regexre;boost::cmatchmatches;while(true){cout>sre;if(sre=="quit"){break;}cout>s;try{//Assignmentandco

c++ - 转义字符串常量以嵌入 std::regex

C++11有6种不同的正则表达式语法供您使用。就我而言,我正在与使用修改后的ECMAScript正则表达式的组件进行交互。我需要创建一个正则表达式“匹配以X开头的字符串”,其中X是我拥有的字符串文字。所以我要的正则表达式大概是^X.*。除了字符串X可以包含更多正则表达式特殊字符,我希望它们出现。这意味着我真的想要^escaped(X).*.现在,我可以阅读ECMAScript文档,找到所有具有特殊含义的字符,编写一个转义它们的函数,然后完成。但这似乎不够优雅、低效且容易出错——尤其是如果我想支持C++目前支持的所有6种正则表达式,更不用说将来了。标准中是否有一种简单的方法来转义文字字符

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