C++ Primer 学习笔记 Chapter 9

9.1 顺序容器 Sequential Containers

  vector:  快速随机访问,

  list:    快速插入/删除 ,

  deque:  双端队列

9.2 迭代器和迭代器的范围

  迭代器操作:

  *iter:              返回iter指向元素的引用。

  iter->mem:     对iter 进行解引用, 等效于(*iter).mem。

  ++iter和iter++: 给iter加1, 使其指向下一个元素。 

  --iter和iter--:  指向下一个元素。 

  iter1 == iter2 和 iter1 != iter2  :  两个迭代器是同一容器的同一个元素,或都指向容器超出末端的下一位置时相等。

计算vector对象的中心位置:

  vector<int>::iterator iter = vec.begin() + vec.size() / 2;

list 容器支持迭代器的算术操作

Exercises Section 9.2

  Exercise 9.7 :以下代码编译出错, list的 iterator 不支持 关系运算符操作

list<int> lst1;
list<int>::iterator iter1 = lst1.begin(),
iter2 = lst1.end();
while (iter1 < iter2) {
  break;
}

 

  Exercise 9.8:当iterator的字符串为空时,执行if内语句

  Exercise 9.8:Write a loop to write the elements of a list reverse order.

#include <iostream>
#include <list>
#include <vector>
#include <sstream>

using namespace std;

void exercize_9_9();

int main() {
  exercize_9_9();
  return 0;
}

void exercize_9_9() {
  list<string> list1 ;
  for (short i = 0; i < 10; ++i) {
    stringstream ss;
    ss << i;
    list1.push_back("string " + ss.str());
  }

  list<string>::iterator it = list1.end();
  do
  {
    --it;
    string s = *it;
    cout << s.c_str() << endl;
  }
  while (it != list1.begin());
}

   Exercise 9.10: Which, if any , of the following iterator uses are in error?

const vector< int > ivec(10);
vector< string > svec(10);
list< int > ilist(10);
(a) vector<int>::iterator it = ivec.begin(); //错误:ivec中的迭代器是const,改成vector<int>::const_iterator
(b) list<int>::iterator it = ilist.begin()+2; //错误:list 中的迭代器不能进行算术加减运算
(c) vector
<string>::iterator it = &svec[0]; //错误:svec[0],是字符型string。
(d)
for (vector<string>::iterator it = svec.begin(); it != 0; ++it) //错误, it != 0改为 it != svec.end()
  //....

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。