c++ primer第三章 - 字符串、向量、数组
字符串、向量、数组:
using std::cin;
标准库类型:string vector
1 string
#include <string>
string s4(10,'c'); //自己初始化
1.1 string的相关操作
拷贝初始化 "="、直接初始化 "()":
string s1="sdhf"; //拷贝初始化
string s1(“sdrf”); //直接初始化
getline(cin,line);函数,一次读取一行,遇到回车返回;
string的“+”运算要求 “+” 两边至少有一个是string类型;
alphabet: 字母
头文件:c标准(name.c) C++标准(cname)
1.2 访问string中的每一个字符:
如果想要改变string对象中的字符的值,一定要把循环变量定义为应用变量:
如 将s中的小写变大写:
for(auto &c:s)
c=toupper(c);
1.3 访问string中的部分字符
方法一:使用下标;方法二:使用迭代器;s[0];
2 vector
#include <vector>vector<int>vector<Sales_item>vector<vector<string>>2.1 vector 初始化
2.2 vector操作
v2.push_back(i);
2.3 vector 访问元素
3 迭代器
迭代器是一种类型,用于访问容器中的元素或者在元素之间移动;
尾后迭代器:end函数返回的迭代器;
3.1 迭代器零碎知识
v.begin(); //v.end(); //end成员负责返回指向容器“尾元素的下一个位置”的迭代器;it->mem ; (*it).mem; 意思相同.cbegin() ; .cend(); 是c++11 新定义的返回 vector<int>::const_interator;
3.2迭代器运算
vi.begin():指的是: vi[0];vi.begin()+n:指的是: vi[n];
4 数组
4.1 不能用一个数组初始化另一个数组;
4.2 数组指针
类型修饰符从右向左依次绑定;int *(&arry)[10]=ptrs; //arry是数组的引用,该数组含有10个指针;
4.3 访问所有元素
4.3.1 范围for循环
4.3.2 指针的begin(p); end(p);
4.4 使用数组初始化vector对象:
int int_att[]={0,1,2,3,4,5};vector<int> ivec(begin(int_att),end(int_att));
5 多维数组:
c++中没有多维数组,多维数组其实是数组的数组;范围for语句的非最内层循环都用引用,因为指针不支持循环访问:5.1 for(auto &row:ia)
for(auto &col:row)。。。
5.2 指针访问:
5.3 begin(ia);end(ia)访问:
实测:int (*p)[4]; 其实是指针的指针,所以 auto q=begin(*p);
6 总结:
访问string、vector、数组 最好使用范围for循环 或者 begin()、end(),因为不涉及数组大小,方便移植:string:for(auto &p:arr)for(auto &q:p)...for(auto i=begin(att);i!=end(att);i++)vector:for(auto &p;arr)for(auto &q:p)...数组:for(auto i:att)cout<<i;多维数组:
for(size_t i=0;i!=rowCnt;++i)for(size_t j=0;j != colCnt; ++j )ia[i][j]=i*colCnt + j;size_t cnt=0;for(auto &row : ia)for(auto &col : row ){col=cnt;++cnt;}for(auto p=ia; p != ia+3; ++p)for(auto q = *p;q != *p+4; ++q....for (auto p=begin(ia);p!=end(ia);++p)for(auto q=begin(*p);q!=end(*p);++q)...