您的位置:首页 > 编程语言 > C语言/C++

C++primer 第三章

2016-01-14 13:39 357 查看
1.命名空间using声明

作用域操作符 : :

std: :cin意思 shiyon 命名空间std中的名字cin

头文件中不应包含using声明,防止名字冲突。

using的使用必须放在命名空间的后头

比如

namespace yinxin
{
char name[20];
int age;
char sex;
}
using namespace yinxin
namespace Lion = yinxin;
int main(void)
{
cout << age << endl;
cout << yinxin::age << endl;
cuut << Lion::age << endl; //结果都一样
}

//命名空间还允许嵌套


C++头文件并没有.h,这样可以区分是C的头文件还是C++的头文件。

C和C++头文件的主要区别在于是否包含命名空间(C++头文件包含)。

命名空间在软件开发(设计上)用于迭代式开发(解释1:今天完成一个功能,明天再完成一个功能,整合在一起,不好的删掉,并不会影响别人的代码,实现有效的封装和有效的迭代||| 解释2:每次只设计和实现这个产品的一部分, 逐步逐步完成的方法叫迭代开发, 每次设计和实现一个阶段叫做一个迭代.)。

2.标准库类型string

String的操作

os << s 将s写到输出流os当中,返回os

is >> s 从is中读取字符串赋给s,字符串以空白分隔,返回is

getline(is , s) 从is中读取一行赋给s ,返回is

s.empty() s为空返回true ,否则返回false

s.size() 返回s中字符的个数

s
返回s中第n个字符的引用,位置n从0记起

s1+s2 返回s1和s2连接的结果

s1 == s2 如果s1和s2中所给的字符完全一样,则他们相等string对象的相等性判断对字母的大小写敏感

s1 != s2

< , <= , > , >= 利用字符在字典中的顺序进行比较,且对字母的大小写敏感

1.c
int main()
{
string s;
cin >> s;
cout << s << endl;
return 0;
}


string 对象会自动忽略开头空白(即 空格符,换行符)并从第一个真正的字符开始读起,直到遇见下一个空白为止。

输入:“ HELLO C++”

=> HELLO

string line = 1234567;

line.size()

=> 7

line.empty() //空字符串返回true

=> false

string::size_type类型

size函数范湖的是一个无符号整型数.

表达式s.size() <n

当n为负值int时,n被转化为unsigned,因此几乎为true.

3.vector

vector是同一种对象的集合,每个对象都有一个对应的整数索引值,是一个能够存放任意类型的动态数组,能够增加和压缩数据。

push_back 新增元素添加vector后面

4.初始化*Vector 对象的方法*

vector v1 v1是一个空的vector,它潜在的元素类型是T类型的执行默认初始化

vector v2(v1) v2中包含有v1所有元素的副本

vector v2 = v1

vector v3(n, val) n个对象初始值为val

vector v4(n) n个对象,默认初始化

vector v5(a,b,c) 每个元素值a,b,c..

vector v5 = {a,b,c} 跟v5相同

vector v1(10);//v1有10个元素,每个的 值都是0

vector v2{10};//v2有1个元素,该元素的值是10

vector v3(10,1); //v3有10个元素,每个的值都是1

vector v4{10,1};//v4有2个元素,值分别为10和1

5.迭代器

1.其对象是容器中的元素或者string对象中的字符.

2.如果容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器.

3.end返回的迭代器并不指示某个元素,不能递增和解引用操作.

vector<int>::iterator it; //it 能读写vector<int>的元素
string::iterator it2; //it2能读写string对象中的字符

vector<int>::const_iterator it3;//it3只能读元素,不能写元素
string::const_iterator it4;//it4只能读字符,不能写字符

vector<int> v
auto it3 = v.cbegin(); //it3的类型是vector<int>::const_iterattor
(*it).empty()含义是先对it解引用,然后解引用的结果再执行点运算符.

(*it).empty() ;  //解引用it,然后调用结果对象的empty成员
*it.emoty();   //错误,试图访问it的名为empty的成员,it是一个迭代器,没有empty成员


使改vector对象的迭代器失效(注意)

1.不能再范围for循环中向vector对象添加元素.

2.任何一种可能改变vector对象容量的操作,比如push_back. !!!(使用了迭代器的循环体,都不要向迭代器所属的容器添加元素)

2.c
//用迭代器将vector字符串全部改写为大写
#include<iostream>
#include<string>
#include<vector>
using namespace std;

int main(void)
{
vector<string> test{"yinxin leaarn c++"};
for(auto t = test.begin(); t != test.end(); t++)
for(auto &c : (*t))
(c) = toupper(c);

cout << test[0] << endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: