标准库类型
最重要的标准库类型是 string 和 vector。
bitset,提供了一种抽象方法来操作位的集合。
using机制
using std::cin;
using std::string;
有一种情况下,必须总是使用完全限定的标准库名字:在头文件中。头文件中应该只定义确实必要的东西。
标准库 string 类型
#include <string>
string s1;
string s2(s1);
string s3("value");
string s4(n, 'c');
getline读取整行文本
任何存储 string 的 size 操作结果的变量必须为 string::size_type 类型。特别重要的是,还要把 size 的返回值赋给一个 int 变量。
string str1 = "Hello";
string str2 = str1 + "world";//正确,字符串串联起来
string str3 = "Hello" + "World";//非法,把两个字符串字面值相加,所以非法。
string str4 = "Hello" + str2;//正确
string 类型通过下标操作符([ ])来访问 string 对象中的单个字符。下
标操作符需要取一个 size_type 类型的值,来标明要访问字符的位置。
string str("some string");
for (string::size_type ix = 0; ix != str.size(); ++ix)
cout << str[ix] << endl;
[color=red]标准库 vector 类型[/color]
vector 是一个类模板(class template)
定义 vector 对象要指定类型和一个变量的列表
vector<T> v1;
vector<T> v2(v1);
vector<T> v3(n, i);
vector<t> v4(n);
vector 对象
(以及其他标准库容器对象)
的重要属性就在于可以在运行
时高效地添加元素。
虽然可以对给定元素个数的 vector 对象预先分配内
存,但更有效的方法是先初始化一个空 vector 对象,
然后再动态地增加元素(我们随后将学习如何进行这样
的操作)。
元素类型可能是没有定义任何构造函数的类类型。这种
情况下,标准库仍产生一个带初始值的对象,这个对象的每个成员进行了值初始
化。
vector 对象的操作
empty()
size()
push_back(t)
v[n]
v1 = v2
v1 == v2
!=, <, <=,
>, and >=
成员函数size 返回相应 vector 类定义的 size_type 的值。
C++ 程序员习惯于优先选用 != 而不是 < 来编写循环判断条件。
编译器遇到内联函数时就会直接扩展相应代码,而不是进行实际的
函数调用。像 size 这样的小库函数几乎都定义为内联函数,所以每次
循环过程中调用它的运行时代价是比较小的。
必须是已存在的元素才能用下标操作符进行索引。通过下标操
作进行赋值时,不会添加任何元素。
迭代器iterator简介
迭代器是一种检查容器内元素并遍历元素的数据类型。
标准库为每一种标准容器(包括 vector)定义了一种迭代器类型。迭代器
类型提供了比下标操作更通用化的方法:
所有的标准库容器都定义了相应的迭代
器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现
代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下
标操作的 vector 类型也是这样。
每种容器类型都定义了自己的迭代器类型
vector<int>::iterator iter;
这符语句定义了一个名为 iter 的变量,它的数据类型是 vector<int> 定
义的 iterator 类型。
若一种类型支持一组确定的操作(这些操作可用来遍历容器内的元
素,并访问这些元素的值),我们就称这种类型为迭代器。
各容器类都定义了自己的 iterator 类型,用于访问容器内的元素。
begin返回的迭代器指向第一个元素
end操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出
末端迭代器”(off-the-end iterator)。表明它指向了一个不存在的元素。
如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。
迭代器类型可使用解引用操作符(dereference operator)(*)来访问迭
代器所指向的元素。
用 == 或 != 操作符来比较两个迭
代器,如果两个迭代器对象指向同一个元素,则它们相等,否则就不相等。
最重要的标准库类型是 string 和 vector。
bitset,提供了一种抽象方法来操作位的集合。
using机制
using std::cin;
using std::string;
有一种情况下,必须总是使用完全限定的标准库名字:在头文件中。头文件中应该只定义确实必要的东西。
标准库 string 类型
#include <string>
string s1;
string s2(s1);
string s3("value");
string s4(n, 'c');
getline读取整行文本
任何存储 string 的 size 操作结果的变量必须为 string::size_type 类型。特别重要的是,还要把 size 的返回值赋给一个 int 变量。
string str1 = "Hello";
string str2 = str1 + "world";//正确,字符串串联起来
string str3 = "Hello" + "World";//非法,把两个字符串字面值相加,所以非法。
string str4 = "Hello" + str2;//正确
string 类型通过下标操作符([ ])来访问 string 对象中的单个字符。下
标操作符需要取一个 size_type 类型的值,来标明要访问字符的位置。
string str("some string");
for (string::size_type ix = 0; ix != str.size(); ++ix)
cout << str[ix] << endl;
[color=red]标准库 vector 类型[/color]
vector 是一个类模板(class template)
定义 vector 对象要指定类型和一个变量的列表
vector<T> v1;
vector<T> v2(v1);
vector<T> v3(n, i);
vector<t> v4(n);
vector 对象
(以及其他标准库容器对象)
的重要属性就在于可以在运行
时高效地添加元素。
虽然可以对给定元素个数的 vector 对象预先分配内
存,但更有效的方法是先初始化一个空 vector 对象,
然后再动态地增加元素(我们随后将学习如何进行这样
的操作)。
元素类型可能是没有定义任何构造函数的类类型。这种
情况下,标准库仍产生一个带初始值的对象,这个对象的每个成员进行了值初始
化。
vector 对象的操作
empty()
size()
push_back(t)
v[n]
v1 = v2
v1 == v2
!=, <, <=,
>, and >=
成员函数size 返回相应 vector 类定义的 size_type 的值。
C++ 程序员习惯于优先选用 != 而不是 < 来编写循环判断条件。
编译器遇到内联函数时就会直接扩展相应代码,而不是进行实际的
函数调用。像 size 这样的小库函数几乎都定义为内联函数,所以每次
循环过程中调用它的运行时代价是比较小的。
必须是已存在的元素才能用下标操作符进行索引。通过下标操
作进行赋值时,不会添加任何元素。
迭代器iterator简介
迭代器是一种检查容器内元素并遍历元素的数据类型。
标准库为每一种标准容器(包括 vector)定义了一种迭代器类型。迭代器
类型提供了比下标操作更通用化的方法:
所有的标准库容器都定义了相应的迭代
器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现
代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下
标操作的 vector 类型也是这样。
每种容器类型都定义了自己的迭代器类型
vector<int>::iterator iter;
这符语句定义了一个名为 iter 的变量,它的数据类型是 vector<int> 定
义的 iterator 类型。
若一种类型支持一组确定的操作(这些操作可用来遍历容器内的元
素,并访问这些元素的值),我们就称这种类型为迭代器。
各容器类都定义了自己的 iterator 类型,用于访问容器内的元素。
begin返回的迭代器指向第一个元素
end操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出
末端迭代器”(off-the-end iterator)。表明它指向了一个不存在的元素。
如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。
迭代器类型可使用解引用操作符(dereference operator)(*)来访问迭
代器所指向的元素。
用 == 或 != 操作符来比较两个迭
代器,如果两个迭代器对象指向同一个元素,则它们相等,否则就不相等。