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

手机免费个人网站建站国家林业工程建设协会网站

手机免费个人网站建站,国家林业工程建设协会网站,秦皇岛建设网站,app比网站的优势STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这篇文章中将会重点介绍STL中的各种序列型容器和相关的容器适配器。主要内容包括 std::vectorstd::arraystd::dequestd::queuestd::stackstd::…STL中大家最耳熟能详的可能就是容器,容器大致可以分为两类,序列型容器(SequenceContainer)和关联型容器(AssociativeContainer)这篇文章中将会重点介绍STL中的各种序列型容器和相关的容器适配器。主要内容包括 std::vectorstd::arraystd::dequestd::queuestd::stackstd::priority_queuestd::liststd::forward_liststd::vector 提到STL,大部分人的第一反应是容器,而提到容器大部分人首先想到的是std::vector。斯特劳斯特卢普的观点来说,std::vector是所有的容器中的首先,如果你不清楚应该使用哪个容器,那就选std::vector吧(当然,你不应该不清楚选哪个容器,合格是程序员对自己写的代码应该要了如指掌)。 std::vector的使用非常简单,下面是一个简单的例子。 #include vector // 1int main(int argc, char* argv[]) {std::vectorint ages = { 1, 2, 3, 4 }; // 2return 0; } 头文件 // 1中引入了std::vector的头文件,需要注意的是所有C++标准库的头文件都是没有.h结尾的。这么做是为了区分,C标准库的头文件和C++标准库的头文件。比如最具代表性的: #include string.h // C 标准库头文件,包含 strlen,memset 等函数 #include string // C++ 标准库头文件,包含 std::string 类 此外对于所有C标准库头文件,如果你是在C++项目中引用,你应该使用#include cxxx这种方式而不是#include xxx.h这种形式。也就是说我们应该使用#include cstring而不是#include string.h std::vector 还是 vector 我见过很多的人(包括很多书)的习惯是在源文件头部写上using namespace std;然后在代码中使用vectorint,而不是直接使用std::vectorint。 我个人的习惯是直接使用std::vectorint,因为namespace对我来说是一个模块,写明了std::有更强的模块内聚表达力,而且也不太容易出现名字碰撞。 初始化 // 2在构造std::vector的时候直接给了初始值,这是C++11的特性,在C++11之前不能这样写,有一种大致等同的写法如下: int initilizer[4] = { 1, 2, 3, 4 }; std::vectorint ages(initilizer, initilizer + 4);std::vectorint ages = { 1, 2, 3, 4 }这种写法实际上从语法分析上来说是分成下面几个步骤的: { 1, 2, 3, 4 }被编译器构造成一个临时变量std::initializer_listint,然后使用临时变量构造一个临时变量std::vectorint,然后再用std::vectorint的拷贝构造函数构造最终的agesstd::initializer_listint initilizer; std::vectorint tmp(initilizer); std::vectorint ags(tmp); 当然上面的分析只是语法上的分析,绝大部分编译器都可以优化掉tmp,而且因为{1, 2, 3, 4}转换成std::initializer_list是编译器在编译器完成的事情,所以其实效率比我们想象中要高一些。 std::vector std::vector有一个特化版本std::vectorbool,用于实现dynamic bitset,需要注意的是,这个特化版本并不是容器,它的迭代器无法很好的适配STL中的所有算法。它的存在是为了节省空间,它的每一个元素只占用一位而不是一个字节。为了实现这种优化,operator[]返回的是一个代理类,你没有办法取单个元素的地址。通常的建议是,如果你不需要动态的bitset,你可以使用std::bitset,如果你需要dynamic bitset你可以考虑使用std::dequebool替代。 push_backvsemplace_back C++11在容器尾部添加一个元素调用的函数是push_back,它在libcxx中的实现如下: template class _Tp, class _Allocator inline _LIBCPP_INLINE_VISIBILITY void vector_Tp, _Allocator::push_back(const_reference __x) {if (this-__end_ != this-__end_cap()){__RAII_IncreaseAnnotator __annotator(*this);__alloc_traits::construct(this-__alloc(),_VSTD::__to_raw_pointer(this-__end_), __x);__annotator.__done();++this-__end_;}else__push_back_slow_path(__x); } 这里存在两次元素的构造,一次是 __x 参数的构造,一次是容器内部原始的拷贝构造。也就是说使用拷贝构造在末尾构造一个新的元素。emplace_back是C++11为减少其中一次拷贝而引入的新的接口,在libcxx中的实现如下 template class _Tp, class _Allocator template class... _Args inline #if _LIBCPP_STD_VER 14 typename vector_Tp, _Allocator::reference #else void #endif vector_Tp, _Allocator::emplace_back(_Args... __args) {if (this-__end_ this-__end_cap()){__RAII_IncreaseAnnotator __annotator(*this);__alloc_traits::construct(this-__alloc(),_VSTD::__to_raw_pointer(this-__end_),
http://www.eeditor.cn/news/123524/

相关文章:

  • 5个免费安全的资源网站泊头哪给做网站的好
  • 如何自建一个便宜的网站做网站多少钱?
  • 网站开发软件 d营销型网站建设的注意事项
  • 梅林 建站 wordpress汕头网络推广平台
  • 网站建设收费标准html网页制作的软件下载
  • 问问建设网站的人南阳东莞网站建设公司
  • 网站左侧固定广告代码外国做视频在线观看网站
  • 电商购物网站做问卷的网站好
  • 网站被主流搜索引擎收录的网页数量是多少建设外卖网站需要哪些资质
  • 添加qq好友的超链接做网站wordpress购买资源插件
  • php网站培训班全球50个大网站开发语言
  • 东莞松山湖东华医院网站建设优化推广教程
  • 设计师培训招生视频宁阳网站seo推广
  • 教学网站虚拟主机和网站空间
  • 网站建设正规代理商企业网络营销策划平台
  • app和微网站的区别是什么福州制作网站软件
  • 网站建设公司排名深圳中国建设银行app官方下载
  • 做科技汽车的视频网站有哪些网站建设源代码文件
  • 德州网站优化公司做网站爱
  • 做vip视频网站赚钱吗有没有网站开发软件
  • 潮州网站seo趣味阁小程序入口
  • 网站开发设计费用浏览器查看WordPress主题
  • 网站建设 6万元oppo自带软件商店下载
  • 好的活动策划网站湖州市南浔区建设局网站
  • 网站专题页面怎么做wordpress绝对路径图片不显示
  • 网站美工设计流程企业网站建设套餐费用
  • 揭阳网站制作计划江苏省城乡和住房建设厅网站首页
  • 黑龙江省营商环境建设监督局网站中山企业网站建设定制
  • 网站建设服务详细解读12306网站制作
  • 电话销售做网站推销保定清苑城市建设网站