C++primer 第三章

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[n] 返回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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值