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

郑州市网站建设_网站建设公司_PHP_seo优化

广东省路桥建设有限公司网站,响应式网站建设需要注意什么,义乌做网站的电话,百度没有排名的点击软件目录 一、列表初始化 1、一般的列表初始化 2、容器的列表初始化 二、声明 1、 auto 2、decltype 3、nullptr 三、 范围for 一、列表初始化 1、一般的列表初始化 在C98中#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 int main() {…目录 一、列表初始化 1、一般的列表初始化 2、容器的列表初始化 二、声明 1、 auto 2、decltype 3、nullptr 三、 范围for 一、列表初始化 1、一般的列表初始化 在C98中标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };return 0; } 而在C11扩大了用大括号括起的列表(初始化列表)的使用范围使其可用于所有的内置类型和用户自定义的类型使用初始化列表时可添加等号()也可不添加。 注new 表达式初始化时一定不能写等号。 int main() {int x1 1;int x2{ 2 };int array1[]{ 1, 2, 3, 4, 5 };int array2[5]{ 0 };int* pa new int[4]{ 0 }return 0; } 创建对象时也可以使用列表初始化方式调用构造函数初始化。如下图的d2和d3。 class Date { public:Date(int year, int month, int day):_year(year),_month(month),_day(day){cout Date(int year, int month, int day) endl;} private:int _year;int _month;int _day; }int main() {Date d2{ 2022, 1, 2 };Date d3 { 2022, 1, 3 };return 0; } 2、容器的列表初始化 在 vector 和 list 这样的容器中如果我们需要插入数据的话我们就要通过 push_back 这样的函数去一个一个插入。但是在c11中我们可以通过如下方式去插入数据等号也可以省略。 vectorint v1 { 1,2,3,4 };listint lt1 { 1,2,3,4,5,6,7 }; 这种插入的方式就非常方便那么这种方式是怎么实现的呢实现这种方式就需要一个新的容器 了这个容器叫 initializer_list。 它是C11新增的容器提供了 begin 和 end 函数用于迭代器遍历以及获取容器中的元素个数的 size 函数。 C在语法层面会把 { } 认成 initializer_list下面我们来看一看{ }的类型是什么 auto x { 1,2,3,4,5,6 }; cout typeid(x).name() endl; 从上图中我们发现该变量的类型就是 initializer_list 。 那么我们再来看一看vector的构造 上面的3就是实现了 initializer_list 这样就使得我们可以像上面那样对容器进行构造。 当用列表对容器进行初始化时会被认为是initializer_list类型此时不管有多少个值都能够被初始化vector而以前我们必须使用 push_back 一个一个将元素插入。 所以现在有了C11列表初始化的功能我们也可以给我们自己之前模拟实现的vector和list容器加上这个功能下面我就来给vector加上这个功能。 实现思路遍历initializer_list 中的元素然后push_back进要初始化的容器当中。 vector(initializer_listT il):_start(nullptr), _finish(nullptr), _endofstorage(nullptr) {typename initializer_listT::iterator it il.begin();while (it ! il.end()){push_back(*it);it;} } 二、声明 1、 auto 在C98中auto是一个存储类型的说明符表明变量是局部自动存储类型但是局部域中定义局部的变量默认就是自动存储类型所以auto就没什么价值了。C11中废弃auto原来的用法将其用于实现自动类型推断。这样要求必须进行显示初始化让编译器将定义对象的类型设置为初始化值的类型。 我们直接来使用一下它  int main() {int i 10;auto p i;cout i: typeid(i).name() endl;cout p: typeid(p).name() endl;mapstring, string dict { {sort, 排序}, {insert, 插入} };//mapstring, string::iterator it dict.begin();auto it dict.begin();cout it: typeid(it).name() endl;return 0; } 2、decltype 关键字decltype将变量的类型声明为表达式指定的类型即根据表达式的实际类型推演出定义变量时所用的类型。 上面我们用到的 typeid 也能够推导出变量的类型那么它们有什么区别呢 typeid拿到的只是类型的字符串不能用这个再去定义对象。下面的定义方式就不正确。 typeid(x).name() y 20    //这样定义y不行 decltype 则可以推导出一个变量的类型然后再去定义新的变量。如下图 int x1 10; decltype(x1) y1 20; //可以这样去定义y1 3、nullptr 由于C中NULL被定义成字面量0这样就可能回带来一些问题因为0既能指针常量又能表示整形常量。所以出于清晰和安全的角度考虑C11中新增了nullptr用于表示空指针。 其定义如下 #ifndef NULL #ifdef __cplusplus #define NULL  0 #else #define NULL  ((void *)0) #endif #endif 三、 范围for int main() {string s(hello world);string::iterator it s.begin();while (it ! s.end()){cout *it ;it;}cout endl;for (auto e : s){cout e ;}cout endl; } 上面两种遍历方式的结果完全相同。这是因为范围for本质上是迭代器在代码编译的时候编译器会自动将范围for替换为迭代器的形式去遍历。
http://www.ihoyoo.com/news/88948.html

相关文章:

  • 江门医疗网站建设文登住房和城乡建设局网站
  • 做网站和推广工资多少钱永嘉营销网站建设
  • php网站开发路线网站项目运营
  • 怎么做网站超链接成都外贸建站
  • 做行业门户网站注意什么网站打开文件按钮怎么做
  • 公司网站高端网站建设分享惠网站怎么做
  • 郑州住房和城乡建设局网站网站站点建设的端口
  • 贵阳平台网站建设建设网上银行登录入口
  • 石家庄云图网站建设网站被百度k掉怎么办
  • 西乡移动网站建设cnnic 是什么网站
  • 建设交流网站网站建设是一个什么的过程
  • 国外家具设计网站大全东莞人才网官网
  • 上海建站模板厂家铜川矿业公司网站
  • 酷虎云建站工具wordpress后台修改文章浏览数
  • 哈尔滨网站seo公司网站改版目的
  • 建设机械网站制作泰兴网站建设开发
  • 怎么做旅游网站室内设计网站都有哪些平台
  • 中山门户网站制作在哪里买企业网站免费建设
  • 潍坊网站开发weifangwangluo程序员 wordpress主题
  • 怎么降低网站的跳出率百度竞价优缺点
  • 上线了 做商务网站seo网站推广首页排名
  • 移动wap网站信誉好的龙岗网站设计
  • 做网站如何躲过网警百度网站入口
  • 安徽工程建设官方网站网站设计 评价 方法
  • 网站怎么做uc整合台州做网站是什么
  • 杭州网站建设北京丰台做网站
  • 看p站用什么浏览器有没有免费制作网站的
  • qq头像网站源码免费营销软件网站
  • 自己做的网站打不开是什么原因上海全网推广
  • 电子商务网站建设与管理期末试题怎么制作游戏视频教程