天天看点

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

字符串、向量、数组:

using std::cin; 

标准库类型:string vector

1 string

            #include <string>

string s4(10,'c');  //自己初始化

1.1 string的相关操作

拷贝初始化 "="、直接初始化 "()":
string s1="sdhf";  //拷贝初始化
string s1(“sdrf”);  //直接初始化
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
getline(cin,line);函数,一次读取一行,遇到回车返回;
string的“+”运算要求 “+” 两边至少有一个是string类型;
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
alphabet: 字母
punctuation:标点符号
头文件:c标准(name.c)  C++标准(cname)

1.2 访问string中的每一个字符:

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
如果想要改变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 初始化

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

2.2 vector操作

v2.push_back(i);
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

2.3 vector 访问元素

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

3 迭代器

             迭代器是一种类型,用于访问容器中的元素或者在元素之间移动;              尾后迭代器:end函数返回的迭代器;

3.1 迭代器零碎知识

v.begin();  //
v.end();   //end成员负责返回指向容器“尾元素的下一个位置”的迭代器;
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
it->mem  ;  (*it).mem; 意思相同
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
.cbegin()   ;   .cend();    是c++11 新定义的返回 vector<int>::const_interator;

3.2迭代器运算

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
vi.begin():指的是: vi[0];   vi.begin()+n:指的是: vi[n];

4 数组

4.1 不能用一个数组初始化另一个数组;

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

4.2  数组指针

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
类型修饰符从右向左依次绑定;
int *(&arry)[10]=ptrs;  //arry是数组的引用,该数组含有10个指针;
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

4.3 访问所有元素

4.3.1 范围for循环

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

4.3.2 指针的begin(p);  end(p);

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

4.4 使用数组初始化vector对象:

int int_att[]={0,1,2,3,4,5};
vector<int> ivec(begin(int_att),end(int_att));
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

5 多维数组:

c++中没有多维数组,多维数组其实是数组的数组; 范围for语句的非最内层循环都用引用,因为指针不支持循环访问:

5.1 for(auto &row:ia)

     for(auto &col:row)
             。。。
c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

5.2 指针访问:

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:

5.3 begin(ia);end(ia)访问:

c++ primer第三章 - 字符串、向量、数组字符串、向量、数组:1 string2 vector3 迭代器4 数组5 多维数组:6 总结:
实测: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)
           ...

继续阅读