本篇博文的开始,先介绍一道书上看到的智力题:有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。有一台称重精准的天平,只是用一次天平的情况下如何找出比较重的那瓶药丸?

  好了,直接公布答案。从药瓶#1取出一粒药丸,从药瓶#2取出两粒,从药瓶#3取出三粒,依此类推。如果每粒药丸均重1克,则称得总重量为210克(1 + 2 + … + 20 = 20 * 21 / 2 = 210),“多出来的”重量必定来自每粒多0.1克的药丸。药瓶的编号可由算式(weight - 210 grams) / 0.1 grams得出。因此,若这堆药丸称得重量为211.3克,则药瓶#13装有较重的药丸。

  各位是否想出了这样的方法呢(反正我是没有,哈哈)?

  接下来就直奔主题,本文着重介绍标准库类型,但不面面俱到,仅以其中两种最常见的类型string和vector为例,初窥标准库,其余内容见后续博客。

  标准库String类型

  • 一个有用的string IO操作:getline。该函数接受两个参数:一个输入流对象和一个string对象。getline函数从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符。它并不忽略开头的换行符。
  • string的size操作返回的是string::size_type类型的值。它是string累类型定义的配套类型(companion type),以达到使库类型的使用与机器无关(machine-independent),它定义为与unsigned类型有相同含义,且能够储存足够大的string对象的长度。注意,必须加上域操作符表明该类型是由string类定义的,即,size()操作返回string::size_type型,而非int型。
  • 当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个是string类型的。
  • string类型通过下标操作符([])来访问string对象中的单个字符,其类型是size_type。

  标准库vector类型

  • vector不是一种数据类型,而只是一个类模版,可用来定义任意多种数据类型。
  • vector的成员函数size()返回相应vector类定义的size_type的值,且必须指出该类型是在哪里定义的。vector类型总是包括vector的元素类型,如:vector<int>::size_type。
  • 下标操作不添加元素,下标只能用于获取已存在的元素。向vector添加元素,要使用push_back()。

  迭代器简介

  • 所有的标准库容器都定义了相应的迭代器类型,只有少数容器支持下标操作,现代C++程序更倾向于使用迭代器。
  • 每种容器都定义了begin和end函数用于返回迭代器。begin返回迭代器指向的第一个元素(如果存在的话),end操作返回指向容器的“末端元素的下一个”,即“超出末端迭代器(off-the-end-iterator)”,用作哨兵。

  为了形象理解如上所述,举个简单的例子:读取一组整数到vector对象,计算首尾配对的元素和并输出。

     vector<int> ivec;
int ival; cout << "Enter numbers: " << endl;
while (cin >> ival)
ivec.push_back(ival); if (ivec.size() == )
{
cout << "NO Elemnts!" << endl;
return -;
} cout << "Sum of each pair of counterpart elements in the vector: " << endl; vector<int>::size_type cnt = ;
vector<int>::iterator first, last;
for (first = ivec.begin, last = ivec.end() - ; first < last; ++first, --last)
{
cout << *first + *last << " ";
++cnt;
if (cnt % == )
cout << endl;
} if (first == last)
cout << endl
<< "The center element is: "
<< ivec[first] << endl;

最新文章

  1. Shell十三问[转]
  2. Atitit dsl exer v3 qb3 新特性
  3. Scalaz(39)- Free :a real monadic program
  4. 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础
  5. css3写箭头
  6. 关于Eclipse中Browser中显示html页面的总结.
  7. 用nginx做代理服务器上网
  8. 在树莓派上安装leanote
  9. ASP.NET Calendar(日历控件)
  10. 201521123071《Java程序设计》第1周学习总结
  11. 使用.Net Core+EF7 CodeFirst(2)
  12. BZOJ 1226: [SDOI2009]学校食堂Dining [DP 状压]
  13. poj-1012-约瑟夫问题
  14. linu下C语言之BMP图片操作编程(上)
  15. telnet-server、telnet
  16. Java语法细节 - 内存和枚举
  17. spring security oauth2 client_credentials模
  18. Spring使用ioc注解方式配置bean
  19. 隐藏SharePoint 2013 team sites里的follow按钮
  20. [0,x)的随机数

热门文章

  1. bzoj4589
  2. 4.js屏蔽浏览器鼠标右键菜单
  3. 五、hibernate在myeclipse中生成实体和映射
  4. &lt;正则吃饺子&gt; :关于新项目的环境搭建(一)
  5. OnCtlColor
  6. git远程提交到github或者gitee
  7. HTML学习笔记(三)样式CSS
  8. C++多态性:虚函数的调用原理
  9. SQL Server知识详解
  10. ACM心理过程