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: 字母

punctuation:标点符号

头文件: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)
           ...










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值