-
命名空间
使用命名空间的目的是对标识符的名称进行本地化,避免命名冲突。
namespace关键字使得可以通过创建作用范围来对全局命名空间进行分隔。从本质上讲,一个命名空间定义一个范围。
基本形式:namespace <名称> {//声明}
在命名空间之外需要使用范围解析运算符引用命名空间中的对象。
多次引用命名空间中的成员,就用using
基本格式:
using namespace 命名空间名称
using 命名空间名称::成员
没有名称的命名空间,只有在声明他的文件中可见,直接使用成员,其他文件不可见。把全局名称的作用域限制在声明他的文件中的一种方式是将其声明为静态的,更好的方式是使用未命名的命名空间。
-
标准库类型string(包括字符集的处理/locale使用)
#include <string>
using std::string
字符串的输入
单个单词使用std::cin
,读取并忽略开头全部的空白字符(空格/换行符/制表符),读取字符直到再次遇到空白字符。
多个单词使用std::getline(std::cin, s)
std::string line;
while(std::getline(std::cin, line)) {
std::cout << line << std::endl;
}
getline
函数接受两个参数:输入流对象/string对象。getline
不忽略开头换行符,如果开头遇到换行符,返回空串。
字符串的操作
构造函数
复制操作
empty()
size()/capacity()/length()
append(str)/…
insert(pos, str)/…
erase(pos, n)/erase(pos)/erase(first, last)
replace(pos, n, s1)
assign(str) //拷贝str
substr(pos, n)
find(str, pos)/…
compare(str)
c_str()
locale
类是系统区域设置/国家或地区设置,决定程序所使用的当前语言编码/日期格式/数字格式等。locale设置将影响程序的字符串处理
,c++ locale
使用std::locale::global(std::locale(""))
初始化。
-
标准库类型vector
同一种类型的对象的集合/容器,每个对象都有一个索引值(类似数组)。
存放的对象的类型放在类模板名称后面的尖括号来声明。
初始化
vector<T> v1; //类型为空,默认构造函数为空
vector<T> v2(v1); //拷贝
vector<T> v3(n, i); //v3包含n个值为i的元素
vector<T> v4(n); //v4含有n个使用默认构造函数的元素
操作
empty()
size()
push_back()
-
迭代器
迭代器是容器和算法之间的中介。
正向迭代器 容器类名::iterator 迭代器名;
常量正向迭代器 容器类名::const_iterator 迭代器名;
反向迭代器 容器类名::reverse_iterator 迭代器名;
常量反向迭代器 容器类名::const_reverse_iterator 迭代器名;
容器种类和功能:
容器种类 | 功能 |
---|
序列容器 | vector 向量容器/list 列表容器/deque 双端队列容器。容器中的元素是不排序的。 |
排序容器 | set 集合容器/multiset 多冲击和容器/map 映射容器/multimap 多重映射容器,容器中的元素是有序的,插入元素会放到适当的位置。 |
哈希容器 | from c++11:unordered_set 哈希集合/unordered_multiset 哈希多重集合/unordered_map 哈希映射/unordered_multimap 哈希多重映射,未排序,元素的位置由哈希函数决定。 |
用法:迭代器读取它指向的元素,*迭代器名
表示迭代器指向的元素。通过非常量迭代器能修改指向的元素。(类似指针)
std::vector<int> v(n);
std::vector<int>::iterator i;
for(i = v.begin(); i != v.end(); i++) {
std::cout << *i << std::endl;
}
-
数组和多维数组
不存在引用的数组,但存在数组的引用。
int & arr[10];
int (& arr)[10];
note:为什么引用的数组不合法?
第一,引用必须初始化,引用本意是不含内存空间的,而且引用数组是直接拿另外一个数组初始化引用,但是数组不具备拷贝功能,所以引用数组不能初始化。可以使用指针来解决。