- C++的两种最重要的标准库类型string和vector
- 类型具有更高级性质,尚未直接实现到计算机硬件中
- 访问库中名字的简单方法:using声明
- std::cin就是要使用命名空间中的名字cin, using声明就无须专门前缀
- 如
using std::cin; using std::cout; using std::endl;
- 头文件不应包含using声明,因其会拷贝到所有应用其的文件中,可能产生名字冲突
标准库类型string
#include<string>
using std::string;
string s1("value");
string s2 = "value";
string s(n, c) //ccccccccc;
//string 对象操作
os<<s; //将s写到输出流os中,返回os
is>>s;//从is中读取字符串赋给s, 字符串以空白分隔,返回is
getline(is, s);//从is中读取一行赋给s, 字符串以空白分隔,返回is
s.empty();
s.size():
s[n];
s1+s2;//加法运算符至少有一个是string对象,字面值不是string对象
s1=s2;
//== != < <= > >=
cin>>s1>>s2;//空格分隔
cout<<s1<<s2;
string line;
while(getline(cin, line))//读换行符,不存换行符
if (!line.empty())
cout<<line<<endl; //手动加换行符
- 处理string对象中的字符
- 在cctype头文件中定义了一组标准库函数
C++兼容了C语言的标准库,name.h–>cname。注意在名为cname的头文件中定义的名字属于命名空间std,而定义在.h中的则不然。
使用cname,标准库中的名字就总能在命名空间std中找到了。
//for(auto c : str)
string s = "Hello World!!!"
decltype(s.size()) punc_cnt = 0;//size_type类型 string::size_type n;
for (auto c : s)
if (ispunct(c))
++punct_cnt;
for (auto &c : s)
c = toupper(c);//改变了s
//for使用下标迭代
for(decltype(s.size()) index = 0;
index != s.size() && !isspace(s[index]); ++index)
s[index] = toupper(s[index]);
isalnum(c);//字母或数字
isalpha(c);
iscntrl(c);//控制字符
isdigit(c);
isxdigit(c);//十六进制数字
isgraph(c);//c不是空格但可打印
isprint(c);//c是可打印字符:空格或者具有可视形式
isspace(c);
ispunct(c);//标点符号
islower(c);
isupper(c);
tolower(c);
toupper(c);
标准库类型vector
类模板class template
可以将模板看作为编译器生成类或函数编写的一份说明
编译器根据模板创建类或函数的过程称为实例化
大多数(非引用)内置类型和类类型都可以构成vector对象
#include<vector>
using std::vector;
vector<T> v1;//执行默认初始化
vector<T> v2(v1);
vector<T> v2 = v1;
vector<T> v3(n,val);
vector<T> v4(n);
vector<T> v5{a,b,c};
vector<T> v5 = {a,b,c};
//向vector中添加元素
string word;
vector<string> text;
while( cin >> word ){
text.push_back(word);}
v.isempty();
v.size();
v.push_back(t);
v[n];
v1 = v2;
//== != < <= > >=
迭代器iterator
标准库容器可以使用迭代器,string对象也支持迭代器
vector和string支持下标运算符,其他容器不一定
.begin()
.end()//尾后迭代器,如果为空,end和begin相同
标准容器迭代器的运算符 | |
---|---|
*iter | 返回迭代器iter所指元素的引用 |
iter->mem (*iter).mem | 解引用并获取mem成员 |
++iter | |
–iter | |
!= == |
- vector string迭代器支持的运算
iter+n
iter - n
iter1-iter2