C++Primer学习笔记第九章(9/18)顺序容器-(下)

容器定义的类型别名

1 size_type

2 iterator, const_iterator, reverse_iterator, const_reverse_iterator, difference_type,     value_type

3 reference

4 const_reference

 

 

 

顺序容器的操作1—访问

c.begin()                    返回类型 iterator

c.end()                       返回类型 iterator

c.rbegin()                   返回类型 iterator

c.rend()                      返回类型 iterator

c.back()                      返回类型 reference

c.front()                      返回类型 reference

c[n]                            返回类型 reference(仅仅适用于vector, dequeue)

c.at(n)                        返回类型 reference(仅仅适用于vector, dequeue)

 

例程:区别c.begin()c.front()的返回值差异

if (!ilist.empty())

{

         // val and val2 refer to the same element

         list<int>::reference val = *ilist.begin();

         list<int>::reference val2 = ilist.front();

 

         // last and last2 refer to the same element

         list<int>::reference last = *--ilist.end();

         list<int>::reference last2 = ilist.back();

}

 

 

顺序容器的操作2—增加元素

c.insert(p,t), c.insert(p,n,t), c.insert(p,b,e)

//注意其中的P代表迭代器,而迭代器可能指向超出容器末端的下一位置,所以insert()函数全是在其指向位置之前而非之后插入数据。

c.push_back(t),

c.push_front(t),

 

增加元素相关操作注意事项:

迭代器返回值可能是超出容器末端的下一位置,此时特别容易出现问题。

问题例程:

vector<int>::iterator first=v.begin(), last=v.end();

while(first!=last){

first=v.insert(first, 42);

++first;

}

修改思路:

   做最坏的打算,假设每次对容器的增添操作都会使得迭代器失效。

修改例程:

while(first!=v.end()){

first=v.insert(first, 42);

++first;

}

 

 

顺序容器的操作3—删除元素

c.erase(p)                          返回类型 iterator,指向删除元素后一位所指向的元素

c.erase(b,e)                       返回类型 iterator,指向删除元素段后一位所指向的元素

c.clear()                             返回类型 void

c.pop_back()                      返回类型 void

c.pop_front()                      返回类型 void

 

 

顺序容器的操作4—关于大小

c.size()                              返回类型c::size_type

c.max_size()                      返回类型c::size_type

c.empty()                          返回类型 bool

c.resize(n)                         返回类型 void

c.resize(n,t)                       返回类型 void

 

 

顺序容器的操作5—赋值

c1 = c2

c1.swap(c2)   交换的速度大于赋值

c.assign(b,e)

c.assign(n,t)

 

vector容器的自增长

vector容器的元素以连续的方式存放,所以,访问效率非常高。

而每当vector容器需要分配新的存储空间时,都会加倍当前的容量来实现重现分配。

 

string相关

例程1

//找出”r2d2”这个字符串中出现的所有数字

string::size_type pos = 0;

     while ((pos = name.find_first_of(numerics, pos))!= string::npos) {

cout << "found number at index: " << pos<< " element is " << name[pos] << endl;

++pos; }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值