草庐IT

begin-end-while

全部标签

c++ - end() 迭代器的算术运算

设A为std::vector,这是明确的吗?if(!A.empty())std::vector::iteratormyBack=A.end()-1;是end迭代器只适用于等式和不等式检查?或者只要我留在容器中,我就可以执行一些指针运算?在我的平台上,此代码有效。我想知道这是否是可移植的。 最佳答案 它是完全有效的,因为vector::iterator是一个随机访问迭代器。您可以对其执行算术运算,并且它不依赖于平台。std::vector::iteratorit=A.end();while(it!=A.begin()){--it;//

c++ - std::map::begin() 之前的 STL 迭代器

在C++11的std::map中,是否有一些有效的迭代器x使得++x保证等于map::开始()?我想检测我刚刚调用的函数(我的)是否已经将迭代器从函数的前面移开。该函数会将迭代器恰好向后移动一个位置。答案是否适用于图书馆的其他人? 最佳答案 不,std容器中开始之前的迭代器都是UB(反向迭代器除外,它可能无法解决您的问题)。您可能需要修复有问题的函数。如果做不到这一点,请将其包装起来并在调用它之前捕获不良行为。如果做不到这一点,您可以在map键类型排序中插入一个负无穷大元素,并添加一个标记值。如果做不到这一点,您可以编写迭代器适配器

c++ - std::begin 和 std::end 不能使用指针和引用,为什么?

为什么std::begin()和std::end()使用数组而不是指针[这几乎是数组]和数组的引用[这是原始数组的别名]。挠头15分钟后,我无法在谷歌中得到任何东西。下面只有第一种情况有效,第二种和第三种情况无效,这可能是什么原因?#include#include#include#includeintmain(){intfirst[]={5,10,15};//FistCaseif(std::find(std::begin(first),std::end(first),5)!=std::end(first)){std::cout错误:error:nomatchingfunctionfor

c++ - 我的 cin 在 while 循环中被忽略了

我正在尝试将一个简单的问题和数字检查程序编写到我的第一个C++程序中。问题是,当我输入像一二或三这样的字符串时,程序会变成无限循环,它会忽略cin函数来将生命重新分配给一个数字。cout>lives;while(lives!=1&&lives!=2&&lives!=3&&!isdigit(lives)){cout>lives;}这是我当前的代码以及您的建议:cout>lives){while(lives!=1&&lives!=2&&lives!=3){cout>lives;}} 最佳答案 #include#includeintmai

c++ - 无法使用 end() 获取 map 的第二个字段

我正在创建一个map,只是为了学习目的来存储一些键值对。如果我使用begin()函数打印map的第二个字段,我可以打印map的第二个字段,但是当我尝试使用end()它无法打印第二个字段。下面是我的代码:#include#include#include#include#includeusingnamespacestd;maparr;map::iteratorp;intmain(intargc,char**argv){arr[1]="Hello";arr[2]="Hi";arr[3]="how";arr[4]="are";arr[5]="you";p=arr.begin();printf(

c++ - C++11标准中是否规定std::begin(Container&&)返回const_iterator?

这里是相关代码的链接:#include#include#include#includeintmain(){std::vectorv{1,2,3,4,5};autoiter=begin(std::move(v));if(std::is_const::type>::value)std::couthttp://coliru.stacked-crooked.com/a/253c6373befe8e50我遇到这种行为是因为declval()在decltype用std::begin表达.gcc和clang都返回迭代器,这些迭代器在取消引用时会产生const引用。这可能是有道理的,因为右值引用通常绑

A JSONObject text must begin with ‘{‘ at 1 [character 2 line 1]

今天调用一个接口,返回的是json数据,但是拿到数据进行转换的报错,JSONObjectresultJson=newJSONObject(resuStr);报错信息是:Exceptioninthread"main"org.json.JSONException:AJSONObjecttextmustbeginwith'{'at1[character2line1]atorg.json.JSONTokener.syntaxError(JSONTokener.java:433)atorg.json.JSONObject.(JSONObject.java:195)atorg.json.JSONObjec

c++ - 指南 : while vs for

免责声明:我试图搜索类似的问题,但是它返回了关于每个C++问题的信息...此外,我将感谢任何可以提出更好标题的人。C++中有两个著名的循环结构:while和for。我故意忽略了do...while结构,它是无与伦比的我知道std::for_each和BOOST_FOREACH,但不是每个循环都是foreach现在,我可能有点紧张,但它总是让我很想更正这样的代码:inti=0;while(i并将其转化为:for(inti=0;i在我看来,此示例中for的优点是多方面的:局部性:变量i只存在于循环范围内打包:循环“control”被打包,所以只要查看循环声明我就能确定它是否正确形成(并将终

c++ - 如何识别 C++ while 循环中的最后一次迭代?

我怎样才能让最后一个玩家名字没有,所以它是:Playeronline:Jim,John,Tony不是Playeronline:Jim,John,Tony,我的代码是:boolCommands::whoIsOnline(Creature*c,conststd::string&cmd,conststd::string¶m){Player*player=dynamic_cast(c);if(player){player->sendTextMessage(MSG_STATUS_CONSOLE_BLUE,"Playersonline:");AutoList::listiteratorit

c++ - while(i--) s+= a[i];在 C 和 C++ 中包含未定义的行为?

考虑简单的代码:#include"stdio.h"#defineN10Uintmain(){inta[N]={0};unsignedinti=N;ints=0;//Fillawhile(i--)s+=a[i];printf("Sumis%d\n",s);return0;}while循环是否因整数下溢而包含未定义的行为?编译器是否有权假设while循环条件因此始终为真并以无限循环结束?如果i是signedint怎么办?它不包含与数组访问相关的陷阱吗?更新我多次运行这段代码和类似的代码并且运行良好。此外,它是向后迭代数组和vector的流行方式。我问这个问题是为了确保从标准的角度来看这种方