GVKun编程网logo

为什么标准迭代器范围是 [begin, end) 而不是 [begin, end]?(迭代器 second)

9

本文将介绍为什么标准迭代器范围是[begin,end)而不是[begin,end]?的详细情况,特别是关于迭代器second的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主

本文将介绍为什么标准迭代器范围是 [begin, end) 而不是 [begin, end]?的详细情况,特别是关于迭代器 second的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于67)vector的begin() end() 和 front() back()的区别 rbegin() rend()、AJaxBeginForm ,Ajax,HtmlBegin 什么时候用、Android JSon错误“预期为BEGIN_OBJECT,但在第1行第2列为BEGIN_ARRAY”、Android JSon错误“预计BEGIN_OBJECT但在第1行第2列是BEGIN_ARRAY”的知识。

本文目录一览:

为什么标准迭代器范围是 [begin, end) 而不是 [begin, end]?(迭代器 second)

为什么标准迭代器范围是 [begin, end) 而不是 [begin, end]?(迭代器 second)

为什么标准定义end()为结束,而不是实际结束?

答案1

小编典典

最好的论点很容易是Dijkstra
自己提出的论点:

  • 你希望范围的大小是一个简单的差异 end - 捖 - begin ;

  • 当序列退化为空序列时,包括下限更“自然”,并且还因为替代方案( 不包括 下限)需要存在“一个在开始之前”的标记值。

你仍然需要证明为什么你从零开始计数而不是一,但这不是你问题的一部分。

当您有任何类型的算法来处理对基于范围的构造的多个嵌套或迭代调用时,[begin, end)
约定背后的智慧一次又一次地得到回报,这些构造自然地链接在一起。相比之下,使用双重封闭的范围会导致错误和非常不愉快和嘈杂的代码。例如,考虑一个分区 [ n
0 , n 1 )[ n 1 , n 2 )[ n 2 , n 3 )。另一个例子是标准迭代循环for (it = begin; it!= end; ++it),它运行end - begin时间。如果两端都是包容性的,那么相应的代码的可读性就会大大降低——想象一下你将如何处理空范围。

最后,我们还可以提出一个很好的论点,为什么计数应该从零开始:根据我们刚刚建立的范围的半开约定,如果给定一个包含 N
个元素的范围(比如枚举数组的成员),那么0 是自然的“开始”,因此您可以将范围写为 [0, N ),而无需任何尴尬的偏移或更正。

简而言之:我们1在基于范围的算法中看不到数字的事实是 [begin, end) 约定的直接结果和动机。

67)vector的begin() end() 和 front() back()的区别 rbegin() rend()

67)vector的begin() end() 和 front() back()的区别 rbegin() rend()

1)

··············

 

2)`````````v1.begin() 和v1.end()  是作为迭代器v1的 第一个位置  和 最后一个元素的下一个位置。

`````````````v1.front()   是v1这个动态数组的第一个元素的值  

············ v1.back()是v1的最后一个元素的值。

 

3)

    

 

 4)正向和反向的使用rbegin和begin()

    

 1 #include<iostream>
 2 #include<vector>
 3 
 4 using namespace std;
 5  void hanshu()
 6  {
 7      vector<int> v1;
 8      v1.push_back(2);
 9      v1.push_back(3);
10      v1.push_back(4);
11     //正向遍历
12      for(vector<int>::iterator it=v1.begin();it!=v1.end();it++)
13      {
14         cout<<*it<<endl;
15      }
16      cout<<"开始反向输出这个动态数组了"<<endl;
17      //反向遍历
18      for(vector<int>::reverse_iterator rit=v1.rbegin();rit!=v1.rend();rit++)
19      {
20         cout<<*rit<<endl;
21      }
22 
23 
24  }
25  int main()
26  {
27     hanshu();
28      return 0;
29  }

 

    结果展示:


    

 

AJaxBeginForm ,Ajax,HtmlBegin 什么时候用

AJaxBeginForm ,Ajax,HtmlBegin 什么时候用

1.AJaxBeginForm便是mvc下ajax提交,在对某个容器模块进行更新时候比较好用,可以再里面添加提交开始之前,之后,等等的js方法,但是

这毕竟是mvc模式,若是要提交一些特殊的变量(model所不包含的),就没啥用了。但是这又违背了mvc的开发模式。。。

2.Jquery的ajax提交这个就没什么限制,提交参数啥的自己随便写即可,局部更新比较累。。

3.直接提交表单。

4. var link = "../../Personal/PhotoList?pageIndex=1&ClassId=" + a;
$.ajax({
url: link,
cache: false,
success: function (html) {
document.getElementById('PhotoListPannel').innerHTML = html;
}
});

请求mvc view请求返回控制器的视图页面的html哈。

Android JSon错误“预期为BEGIN_OBJECT,但在第1行第2列为BEGIN_ARRAY”

Android JSon错误“预期为BEGIN_OBJECT,但在第1行第2列为BEGIN_ARRAY”

我从Web服务获取JSon数据,示例数据如下:

[  {    "SectionId": 1,    "SectionName": "Android"  }]

当我尝试将其转换时,它将引发错误,我这样做是:

Data data = new Gson().fromJson(jsonDataFromWebService, Data.class);

我的班级是:

class Section{    public int SectionId;    public String SectionName;}class Data {    public List<Section> sections;}

LogCat说:

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第2列为BEGIN_ARRAY

答案1

小编典典

错误说明发生了什么问题…您返回的是数组而不是JSon对象

尝试如下:

JSONArray ja = new JSONArray(jsonStringReturnedByService);Data sections = new Data();for (int i = 0; i < ja.length(); i++) {    Section s = new Section();    JSONObject jsonSection = ja.getJSONObject(i);    s.SectionId = Integer.ValueOf(jsonSection.getString("SectionId"));    s.SectionName = jsonSection.getString("SectionName");   //add it to sections list   sections.add(s);}return sections;

Android JSon错误“预计BEGIN_OBJECT但在第1行第2列是BEGIN_ARRAY”

Android JSon错误“预计BEGIN_OBJECT但在第1行第2列是BEGIN_ARRAY”

我从Web服务获取JSon数据,示例数据如下:
[
  {
    "SectionId": 1,"SectionName": "Android"
  }
]

当我尝试转换它时,它会抛出一个错误,我这样做:

Data data = new Gson().fromJson(jsonDataFromWebService,Data.class);

我的科级是:

class Section
{
    public int SectionId;
    public String SectionName;
}

class Data {
    public List<Section> sections;
}

LogCat说:

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2

解决方法

错误解释了什么错误…你返回一个数组而不是一个JSon对象

尝试如下:

JSONArray ja = new JSONArray(jsonStringReturnedByService);

Data sections = new Data();

for (int i = 0; i < ja.length(); i++) {
    Section s = new Section();
    JSONObject jsonSection = ja.getJSONObject(i);

    s.SectionId = Integer.ValueOf(jsonSection.getString("SectionId"));
    s.SectionName = jsonSection.getString("SectionName");

   //add it to sections list
   sections.add(s);
}

return sections;

今天的关于为什么标准迭代器范围是 [begin, end) 而不是 [begin, end]?迭代器 second的分享已经结束,谢谢您的关注,如果想了解更多关于67)vector的begin() end() 和 front() back()的区别 rbegin() rend()、AJaxBeginForm ,Ajax,HtmlBegin 什么时候用、Android JSon错误“预期为BEGIN_OBJECT,但在第1行第2列为BEGIN_ARRAY”、Android JSon错误“预计BEGIN_OBJECT但在第1行第2列是BEGIN_ARRAY”的相关知识,请在本站进行查询。

本文标签: