9.18
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<string> sd;
string s;
while (cin >> s)
sd.push_back(s);
for (auto beg = sd.begin(); beg != sd.end(); beg++)
cout << *beg << endl;
return 0;
}
9.19 用list代替deque即可,其他代码相同
9.20
#include <iostream>
#include <list>
#include <deque>
using namespace std;
int main()
{
list<int> ilist = {1, 2, 3, 4, 5, 6, 7, 8};
deque<int> odd, even;
for (auto iter = ilist.begin(); iter != ilist.end(); iter++) {
if (*iter%2 == 0)
odd.push_back(*iter);
else
even.push_back(*iter);
}
for (auto i : odd)
cout << i << endl;
for (auto j : even)
cout << j << endl;
return 0;
}
9.21 循环每次将元素插入vector的首前位置,iter始终指向vector首,功能和list版本一样,但vector每次在头部插入新元素都要移动后面的所有元素,性能比较差。
9.22 insert操作会使当前容器的迭代器失效,所以每次都要重新计算iter和mid,insert操作返回指向第一个新加入元素的迭代器,利用它来更新iter和mid,测试代码如下:到达中间位置以前,每次遇到5,则在其前面插入一个10
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> iv = {5, 5, 5, 5, 5};
int someval = 5;
vector<int>::iterator iter = iv.begin(), mid = iv.begin() + iv.size()/2;
while (iter != mid) {
auto diff = mid - iter;
if (*iter == someval) {
iter = iv.insert(iter, 2 * someval);
iter += 2;
mid = --diff + iter;
}
}
for (auto i : iv)
cout << i << endl;
return 0;
}