当前位置: 首页 > news >正文

网站首页设计分析wordpress模板+企业

网站首页设计分析,wordpress模板+企业,网站建设费应计入什么科目,搜索引擎优化包括哪些使用迭代器遍历容器在遍历的过程中需要给出容器的两端:开头(begin)和结尾(end),因为这种遍历方式不是基于范围来设计的。在基于范围的for循环中,不需要再传递容器的两端,循环会自动以…

使用迭代器遍历容器在遍历的过程中需要给出容器的两端:开头(begin)和结尾(end),因为这种遍历方式不是基于范围来设计的。在基于范围的for循环中,不需要再传递容器的两端,循环会自动以容器为范围展开,并且循环中也屏蔽掉了迭代器的遍历细节,直接抽取容器中的元素进行运算,使用这种方式进行循环遍历会让编码和维护变得更加简便。

#include <iostream>
#include <vector>
using namespace std;int main(void)
{vector<int> t{ 1,2,3,4,5,6 };for (auto value : t){cout << value << " ";}cout << endl;return 0;
}

在上面的例子中,是将容器中遍历的当前元素拷贝到了声明的变量value中,因此无法对容器中的元素进行写操作,如果需要在遍历过程中修改元素的值,需要使用引用。

#include <iostream>
#include <vector>
using namespace std;int main(void)
{vector<int> t{ 1,2,3,4,5,6 };cout << "遍历修改之前的容器: ";for (auto &value : t){cout << value++ << " ";}cout << endl << "遍历修改之后的容器: ";for (auto &value : t){cout << value << " ";}cout << endl;return 0;
}

对容器的遍历过程中,如果只是读数据,不允许修改元素的值,可以使用const定义保存元素数据的变量,在定义的时候建议使用const auto &,这样相对于const auto效率要更高一些。

#include <iostream>
#include <vector>
using namespace std;int main(void)
{vector<int> t{ 1,2,3,4,5,6 };for (const auto& value : t){cout << value << " ";}return 0;
}

使用基于范围的for循环有一些需要注意的细节,先来看一下对关系型容器map的遍历:

#include <iostream>
#include <string>
#include <map>
using namespace std;int main(void)
{map<int, string> m{{1, "lucy"},{2, "lily"},{3, "tom"}};// 基于范围的for循环方式for (auto& it : m){cout << "id: " << it.first << ", name: " << it.second << endl;}// 普通的for循环方式for (auto it = m.begin(); it != m.end(); ++it){cout << "id: " << it->first << ", name: " << it->second << endl;}return 0;
}

在上面的例子中使用两种方式对map进行了遍历,通过对比有两点需要注意的事项:

使用普通的for循环方式(基于迭代器)遍历关联性容器, auto自动推导出的是一个迭代器类型,需要使用迭代器的方式取出元素中的键值对(和指针的操作方法相同):
it->first
it->second
使用基于范围的for循环遍历关联性容器,auto自动推导出的类型是容器中的value_type,相当于一个对组(std::pair)对象,提取键值对的方式如下:
it.first
it.second

通过对基于范围的for循环语法的介绍可以得知,在for循环内部声明一个变量的引用就可以修改遍历的表达式中的元素的值,但是这并不适用于所有的情况,对应set容器来说,内部元素都是只读的,这是由容器的特性决定的,因此在for循环中auto&会被视为const auto &

#include <iostream>
#include <set>
using namespace std;int main(void)
{set<int> st{ 1,2,3,4,5,6 };for (auto &item : st) {cout << item++ << endl;		// error, 不能给常量赋值}return 0;
}

除此之外,在遍历关联型容器时也会出现同样的问题,基于范围的for循环中,虽然可以得到一个std::pair引用,但是我们是不能修改里边的first值的,也就是key值。

#include <iostream>
#include <string>
#include <map>
using namespace std;int main(void)
{map<int, string> m{{1, "lucy"},{2, "lily"},{3, "tom"}};for (auto& item : m){// item.first 是一个常量cout << "id: " << item.first++ << ", name: " << item.second << endl;  // error}return 0;
}

基于范围的for循环遍历的对象可以是一个表达式或者容器/数组等。假设我们对一个容器进行遍历,在遍历过程中for循环对这个容器的访问频率是一次还是多次呢?我们通过下面的例子验证一下:

#include <iostream>
#include <vector>
using namespace std;vector<int> v{ 1,2,3,4,5,6 };
vector<int>& getRange()
{cout << "get vector range..." << endl;return v;
}int main(void)
{for (auto val : getRange()){cout << val << " ";}cout << endl;return 0;
}
get vector range...
1 2 3 4 5 6

从上面的结果中可以看到,不论基于范围的for循环迭代了多少次,函数getRange()只在第一次迭代之前被调用,得到这个容器对象之后就不会再去重新获取这个对象了。

结论:对应基于范围的for循环来说,冒号后边的表达式只会被执行一次。在得到遍历对象之后会先确定好迭代的范围,基于这个范围直接进行遍历如果是普通的for循环,在每次迭代的时候都需要判断是否已经到了结束边界

http://www.yayakq.cn/news/965191/

相关文章:

  • 镜像网站怎么做wordpress多站点支付插件
  • 岳麓区专业的建设网站公司海淀
  • 免费做电子书的网站wordpress 文件大小
  • 在线做3d交互的网站卡尺 东莞网站建设
  • 建网站 做淘宝客泉港区规划建设局网站
  • h5响应式网站建设网站建设403
  • 淄博哪家公司做网站最好特效视频制作软件app
  • 网站开发如何设置视频2016网站建设总结
  • 易语言可以做网站么网站设计小结
  • 天津黑曼巴网站建设合肥seo推广公司哪家好
  • 怎么介绍自己做的网站wordpress 页面 置顶
  • 用PS怎么做网站界面建筑企业分公司使用总公司资质
  • 网站定制建网站定制建设设免费推广预期效果
  • 手机版网站与app手机个人网站制作教程
  • 专门做销售培训的网站小语种网站建设要点
  • 平顶山建设局网站上海装修公司哪家性价比高
  • 企业网站ps模板东城网站开发公司
  • 在线制作国庆头像网站优化要怎么做
  • 萍乡手机网站建设什么是网站栏目标题
  • 招聘网站套餐海外代发货平台
  • 网站开发 需求调研百度搜索网站显示图片
  • 网站的内容规划怎么写wordpress怎么上传自己的网站吗
  • 西安网站建立寓意好的公司名字
  • 浙江高端建设网站有什么网站可以做运动
  • 网站制作公司北京网站建设公司哪家好网站被入侵后需做的检测(1)
  • 专业优定软件网站建设华为邮箱怎么注册
  • 建立手机网站郑州市建设网官网
  • 聊城建设工程质量信息网站宁波网站推广怎么做
  • 兰州网站建设推荐q479185700顶你深圳旅游网站建设
  • 太原网站设计费用提供营销型网站设计