草庐IT

c++ - 使用 decltype 返回迭代器

我有这门课:templateclassHybrid{public:Hybrid():m_activeStackSize(0){}private:std::listdata;size_tm_activeStackSize;autointernal_peek()->decltype(data)::iterator{if(m_activeStackSize)//peekfromstack{decltype(data)::iteratoritr=data.end();std::advance(itr,-1);returnitr;}else//peekfromqueue{decltype(dat

c++ - 在模板类中定义迭代器时出现 STL 编译错误

下面的代码给出了错误:error:type‘std::list>’isnotderivedfromtype‘Foo’error:expected‘;’before‘iter’#includetemplateclassFoo{public:std::list::iteratoriter;private:std::listelements;};为什么这是正确的? 最佳答案 你需要typenamestd::list::iterator.这是因为list取决于模板参数,因此编译器无法知道名称iterator到底是什么它将在其中(好吧,从技术

c++当尾数迭代器时,迭代器+整数的结果是什么?

假设您有一个随机访问迭代器(例如std::vectormyVector)当iter+someInt是past-end-iterator时,iter+someInt==myVector.end()??或者它可以是与myVector.end()不同的值吗? 最佳答案 这是未定义的行为。任何事情都可能发生。仅举几个选项:什么都没有,程序退出,异常,崩溃。 关于c++当尾数迭代器时,迭代器+整数的结果是什么?,我们在StackOverflow上找到一个类似的问题: h

c++ - 在模板 vector 上返回迭代器

我一直在四处寻找类似的东西,但找不到(或者我找到的东西没有帮助)。我正在尝试能够在模板类的vector上使用迭代器,返回它并在类外部使用它,如下面的代码所示。#include#includeusingnamespacestd;namespacens{templateclasstest{private:vectorcontainer;public:typedefvector::iteratoriterator;vector::iteratorbegin(){returncontainer.begin();}vector::iteratorend(){returncontainer.end

c++ - 有没有办法让模板函数自动推断迭代器的底层数据类型?

我有一个函数,我需要一个迭代器的基础数据类型作为返回类型,如下所示:#include#include#includetemplatestd::vectorget_odd(ForwardIteratordata_begin,ForwardIteratordata_end){std::vectorret;std::copy_if(data_begin,data_end,std::back_inserter(ret),[](intx){returnx%2;});returnret;}intmain(){std::vectorvi{1,2,3,4,5};for(autoi:get_odd(vi

c++ - C++ 中的迭代器

我正在尝试创建自己的翻译器。这是大学作业。我的类翻译器中需要一个迭代器。classTranslator{private:maptranslator;public:classiterator{friendclassTranslator;private:map::iteratoritm;public:iteratoroperator++();pair&operator*();booloperator==(constiterator&it)const;};};我正在尝试重载operator*();这是代码。pair&Translator::iterator::operator*(){retu

c++ - 使用迭代器删除元素,不知道 vector

我有一个情况。我为我的一项任务使用了模板化函数。对于这个函数,我通过引用传递迭代器。现在,我必须从vector中删除几个元素。我如何仅使用迭代器来做到这一点?请找到相应的代码:templateboolSomeFunc(BidirectionalIterator&first,BidirectionalIterator&last,IteratoranotherVecBegin){while((first+1)!=last){if(some_condition)//delete(first);HOW?elseif(some_other_condition)//delete(first+1);

c++ - 为什么 map.erase 返回迭代器?

我想删除std::map从beginIt到endIt的元素。erase函数将迭代器返回到最后一个删除元素之后的元素。不是结束了吗?为什么删除返回迭代器?autoit=m_map.erase(beginIt,endIt); 最佳答案 这是C++标准库为其所有容器采用的一个有用的特性。一个特别好的用途是当您删除一组受约束的元素并且迭代整个容器时。显然,从容器中删除某些内容会使您传递的迭代器无效。返回下一个候选迭代器很有用。 关于c++-为什么map.erase返回迭代器?,我们在StackO

c++ - 如何使用 for 循环通过反向迭代器调用删除

关于此处提供的答案:Howtocallerasewithareverseiterator在带有-std=c++11的g++4.8.4中编译时,以下结果会导致段错误(在++it上)。我是不是误解了答案?std::maptestmap;testmap[0]=1;for(autoit=testmap.rbegin();it!=testmap.rend();++it){testmap.erase(std::next(it).base());} 最佳答案 erase使迭代器无效,你必须从erase的返回中重建它:it=std::map::re

c++ - 为什么 std::search 需要转发迭代器

我的问题与下面的线程相同,我很难理解给出的答案,或者更确切地说,我的代码不应该工作,因为它只使用输入迭代器..但我的func似乎工作并且行为与std相同::search..所以我很茫然,不愿意在没有正确理解的情况下继续前进......也许如果有人可以提出一个会破坏我的功能但不会破坏std::的输入来自WhydoIneedaForwardIteratortoimplementmycustomizedstd::search:Iamstudyingthebook"AcceleratedC++"fromKoenig&Moo.Exercise8-2askmetoimplementonmyowns