草庐IT

regex_iterator

全部标签

c++ - std::ostream_iterator 未找到运算符<<

我已经声明了一个operator对于std::pair:std::ostream&operator&p){o我想在打印数据时使用这个运算符:std::vector>data;std::copy(data.begin(),data.end(),std::ostream_iterator>(std::cout,"\n"));但是编译器说,nomatchforoperator...我做错了什么? 最佳答案 std::copy找不到operator的重载对于std::pair在std命名空间。没有什么好办法,重载operator对于来自st

c++ - 使用 boost::regex_search 忽略大小写

如何在C++中使用boost::regex_search忽略大小写标志或常量?请发布一个简单的示例。谢谢! 最佳答案 你需要这样的东西boost::regexregex("yourexpressionhere",boost::regex::icase);boost::smatchwhat;stringmystring;boolsearch_result=boost::regex_search(mystring.begin(),mystring.end(),what,regex); 关于c

c++ - 为什么将 set::iterator 而不是 const_iterator 传递给函数会违反单一定义规则?

std::set的描述容器givenbycppreference.com最后包含此注释:Themembertypesiteratorandconst_iteratormaybealiasestothesametype.Sinceiteratorisconvertibletoconst_iterator,const_iteratorshouldbeusedinfunctionparameterliststoavoidviolationsoftheOneDefinitionRule.我不明白最后这句话。我的理解是一个集合不允许修改它的元素(如果你需要改变一个,你必须erase它然后inse

c++ - 运行时错误 : map/set iterators incompatible

我在第8行遇到运行时错误“map/setiteratorsincompatible”。voidManager::Simulate(Military*military,Shalishut*shalishut,char*args[]){Simulation*simulation=Simulation::GetInstance();Time*time=Time::GetInstance();multimap::iteratoritTasks;itTasks=simulation->GetTasks().begin();while(itTasks!=simulation->GetTasks()

c++ - std::regex 线程安全吗?

与Isastaticboost::wregexinstancethread-safe?相关但对于标准化版本。我可以从具有相同regex对象的多个线程调用regex_search吗? 最佳答案 声称std::regex在各个方面都是线程安全的是一个非常大胆的声明。C++11标准不对正则表达式库做出这样的保证。但是,查看std::regex_search的原型(prototype)显示它将basic_regex对象作为const参数。这意味着它受到标准库的保护,保证const修饰符impliesthread-safety关于该参数的函数

c++ - 有没有办法使用独立的 `std::begin` 和 const_iterator?

我喜欢一致性。我最近问了使用std::begin的问题与例如std::vector::begin,并且一致的决定似乎是使用前者,因为它更通用。但我想我在泥泞中找到了一根棍子。有时,您想传达在循环遍历容器时不会更改容器,因此调用std::vector::cbegin.如果您有时这样做会使您的代码非常不对称iter=v.cbegin()其他时候做了iter=begin(v).有没有办法解决这种不对称的问题,您是否仍会推荐std::begin鉴于这些知识?为什么C++没有std::cbegin? 最佳答案 C++14有cbegin/cen

c++ - 为什么只有 random-access-iterator 在 C++ 中实现 operator+?

我想为STLlist迭代器获取farnext值,但它没有实现operator+,不过vector有它。为什么以及如何获得我想要的值(value)?我想如果我多次调用operator++就可以做到这一点,但这不是有点脏吗?我想做的是:listl;...omitted...list::iteratoritr=l.begin()+3;//but,listiteratordoesnothave//operator+什么是我想要的最佳解决方案? 最佳答案 您想使用std::advance:list::iteratoritr=l.begin()

c++ - 使用 mingw-w64 工具链时,以 Release模式链接的 Regex Boost 库会发出 "duplicate section has different size"警告

在Release模式下链接我的项目时,我收到以下警告:myProject-libs/release/libboost_regex-mt-s-1.50.0.a(cpp_regex_traits.o):duplicatesection`.data$_ZZN5boost16cpp_regex_traitsIcE21get_catalog_name_instEvE6s_name[boost::cpp_regex_traits::get_catalog_name_inst()::s_name]'hasdifferentsize我怀疑原因可能是boost库的编译选项与我在项目中使用的选项不同,但我

c++ - 为什么ostream_iterator需要显式声明要输出的对象类型?

在当前的C++中,ostream_iterator类的设计如下://excerptedfromthestandardC++templateclassostream_iterator{public:ostream_iterator(ostream_type&);...ostream_iterator&operator=(constT&);...};对我来说,这个设计不是最理想的。因为用户在像这样声明ostream_iterator时必须指定类型T:ostream_iteratoroi(cout);事实上,cout可以将任何类型的对象作为其参数,而不仅仅是一种类型。这是一个明显的限制。//

c++ - copy_backward 还是用 reverse_iterators 复制?

在实际使用上有什么区别a)向后复制b)使用reverse_iterators复制源和目标特别是一个比另一个更普遍适用吗?还有其他区别吗?更新:如果真的没有区别,那么C++文献中对这种等价性的任何引用都是值得赞赏的。这个问题背后的动机是要了解这是设计使然还是其中一个失误(比如缺少copy_if) 最佳答案 首先,copy_backward()的使用清楚地表明了开发人员打算以相反的顺序复制间隔。copy_backward()适用于原始双向迭代器,而reverse_iterator是双向迭代器的适配器,可能不如原始迭代器有效。当您需要对像