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

来源:互联网 发布:台湾九合一选举 知乎 编辑:程序博客网 时间:2024/05/21 12:14

容器定义的类型别名

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; }

 

原创粉丝点击