关于vector和迭代器copy函数使用案例
#include<iostream>
#include<iterator>
#include<vector>
int main() {
using namespace std;
int MyArray[10] = { 9, 3, 6, 0, 4, 9, 7, 3, 6 };
//复制这个数组到一个vector
vector<int> MyContainers(10);
copy(MyArray, MyArray + 10, MyContainers.begin());
//创建一个输出迭代器
ostream_iterator<int, char> out_iter(cout, " ");
//从矢量中复制到输出迭代器
cout << "现在输出迭代器" << endl;
copy(MyContainers.begin(), MyContainers.end(), out_iter);
cout << "现在使用反向迭代器" << endl;
copy(MyContainers.rbegin(), MyContainers.rend(), out_iter);
return 0;
}
关于vector的其他功能,以及迭代器可以用于遍历元素
//P678页程序清单16.8
#include<iostream>
#include<iterator>
#include<vector>
#include<string>
struct Review//回顾(书籍)
{
std::string title;//名称
int rating;//额定值
};
bool FillReview(Review& rr);
void ShowReview(const Review& rr);
int main() {
using std::cout;
using std::vector;
vector<Review> books;
Review temp;
while (FillReview(temp))
books.push_back(temp);
int num = books.size();
if (num > 0) {
cout << "你好,点击继续:"
<< "Rating\tBook\n";
for (int i = 0; i < num; i++)
ShowReview(books[i]);
cout << "Reprising(重新编译):\n"
<< "Rating\tBook\n";//这里是表头
vector<Review>::iterator pr;//使用vector的迭代器iterator
//这里的迭代器pr相当于指针,储存了一个地址,同样*pr就是取它的值
for (pr = books.begin(); pr != books.end(); pr++)
ShowReview(*pr);
/* 这里做遍历,从第一个元素开始,如果这个迭代器不等于最后一个元素
则迭代器的位置+1,这里迭代器相当于数组的角标或者索引,
ShowReview函数可以显示书籍名称和编号
*/
vector<Review> oldlist(books);
if (num > 3) {
//移除两个词条
books.erase(books.begin() + 1, books.begin() + 3);
cout << "After erasure:\n";
for (pr = books.begin(); pr != books.end(); pr++)
ShowReview(*pr);
//替换一个词条
books.insert(books.begin(), oldlist.begin() + 1, oldlist.begin() + 2);
cout << "替换之后:\n";
for (pr = books.begin(); pr != books.end(); pr++)
ShowReview(*pr);
}
books.swap(oldlist);
cout << "用book更换oldlist:\n";
for (pr = books.begin(); pr != books.end(); pr++)
ShowReview(*pr);
}
else
cout << "没有输入,没有改变。\n";
return 0;
}
bool FillReview(Review& rr) {
std::cout << "输入书名(输入quit则退出):";
std::getline(std::cin, rr.title);
if (rr.title == "quit")
return false;
std::cout << "输入书的额定值rating";
std::cin >> rr.rating;
if (!std::cin)
return false;
//
while (std::cin.get() != '\n')
continue;
return true;
}
void ShowReview(const Review& rr) {
std::cout << rr.rating << "\t" << rr.title << std::endl;
}