本篇博文的开始,先介绍一道书上看到的智力题:有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;

C++拾遗(二)——初窥标准库类型的更多相关文章

  1. 标准库类型vector

    标准库类型vector表示对象的集合,其中所有对象的类型都相同.集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它被称为容器. 要想使用vector, ...

  2. 谈谈两种标准库类型---string和vector

    两种最重要的标准库---string和vector string和vector是两种最重要的标准库类型,string表示可变长的字符序列,vector存放的是某种给定类型对象的可变长序列. 一.标准库 ...

  3. C++ Primer 学习笔记_6_标准库类型 -- 命名空间using与string类型

     标准库类型(一) --命名空间using与string类型 引: 标准库类型是语言组成部分中更主要的哪些数据类型(如:数组.指针)的抽象! C++标准库定义的是高级的抽象数据类型: 1.高级:由 ...

  4. C++ 标准库类型-String,Vector and Bitset

    <C++ Primer 4th>读书摘要 最重要的标准库类型是 string 和 vector,它们分别定义了大小可变的字符串和集合.这些标准库类型是语言组成部分中更基本的那些数据类型(如 ...

  5. C++ Primer 第三章 标准库类型vector+迭代器iterator 运算

    1.vector: 标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象.因为vector“容纳着”其他对象,所以它也常被称作容器( ...

  6. C++ Primer 第三章 标准库类型string运算

    1. 标准库类型 string string表示可变长的字符序列,使用string必须首先包含string头文件.如何初始化类的对象是由类本身决定的. int n; string s1;//默认初始化 ...

  7. C++ Primer笔记1_转义字符_标准库类型string_标准库类型vector

    1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using na ...

  8. C++标准库类型vector及迭代器iterator简介

    Vector是C++标准库类型,称为容器,一个容器中的所有对象必须是同一种类型的.与数组相比,其最大的优点就是动态增长.Vector是一个类模板,并不是数据类型,而vector<int>和 ...

  9. C++primer第三章标准库类型

    除第二章介绍的基本数据类型外,C++ 还定义了一个内容丰富的抽象数据类型标准库. 本章将介绍标准库中的 vector.string 和 bitset 类型. string 类型支持长度可变的字符串 v ...

随机推荐

  1. for循环的一个注意点

    unsigned int i =10; for(i;i > 0; i--) { xxxxx } 因为i是unsigned int 类型的,永远不可能小于0,也就是说是个死循环了.

  2. sizeToFit的学习与认知

    今天一扫前两日的坏心情,终于有心情平静下来,今天我是根据网络上的一些资料进行学习,今天学习的内容是 sizeToFit() 方法在不方便手动布局的场景中的使用. 首先感谢资料的提供者:参考1 参考2 ...

  3. [CVE-2014-3704]Drupal 7.31 SQL注入漏洞分析与复现

    记录下自己的复现思路 漏洞影响: Drupal 7.31 Drupal是一个开源内容管理平台,为数百万个网站和应用程序提供支持. 0x01漏洞复现 复现环境: 1) Apache2.4 2) Php ...

  4. visual editor ve1.5下载

    eclipse官网的ve下载不了,下面这个能下 http://sourceforge.net/projects/visualeditor/files/latest/download

  5. 图数据库初探之Neo4j

    图数据库初试之Neo4j 自从进入了移动互联网时代,各种新事物出现的速度都好像坐上了宇宙飞船,几乎隔几天一个新概念.就拿数据库而言,什么Oracle.DB2.SQL Server.MySQL,这些你都 ...

  6. LeetCode: 412 Fizz Buzz(easy)

    题目: Write a program that outputs the string representation of numbers from 1 to n. But for multiples ...

  7. CodeForces 600C【构造】

    题意: 在原字符串中修改数量最少,然后保证最小字典序. #include <bits/stdc++.h> using namespace std; typedef long long LL ...

  8. AtCoder Regular Contest 061 E - すぬけ君の地下鉄旅行【最短路】

    具体题解又要搬大哥的了,嘿嘿~ 请点击:G点我 这道题目的难点就是同一家公司的路直接走不需要再花费,然后多了一个公司这个东西,这个不像是边的副权值(瞎说的)之类的东西,这是对于路来说的,路的属性... ...

  9. 3DMAX 7 角色建模1 人头建模

    说明: mesh与poly 可编辑多边形是一个多边形网格:即与可编辑网格不同,其使用超过三面的多边形.可编辑多边形非常有用,因为它们可以避免看不到边缘.例如,如果您对可编辑多边形执行切割和切片操作,程 ...

  10. 51nod1352(exgcd)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352 题意:中文题诶- 思路:exgcd 显然题目可以描述为: ...