Vector模板常见操作


#include <iostream>
#include <string>
#include <vector>

struct Review{
	std::string title;
	int rating;
};

bool FillReview(Review &rr)
{
	std::cout<<"Enter book title (quit to quit): ";
	std::getline(std::cin,rr.title);
	if(rr.title == "quit")
		return false;
	std::cout<<"Enter book rating: ";
	std::cin>>rr.rating;
	if(!std::cin) //rating输入的是非数字时返回false
		return false;
	std::cin.get(); //接收换行符
	return true;
}

void ShowReview(const Review &rr)
{
	std::cout<<rr.rating<<"\t"<<rr.title<<std::endl;
}

int main()
{
	using std::cout;
	using std::vector;
	vector<Review> books;//vector模板使用动态内存分配
	Review temp;
	while(FillReview(temp))
		books.push_back(temp);//将元素添加到矢量尾
	int num = books.size();//返回books的大小
	if(num>0)
	{
		cout<<"Thank you. You entered the following:\n"
			<<"Rating\tBooks\n";
		vector<Review>::iterator pr;//为vector的Review类型规范声明一个迭代器(指针),作用域为整个类
		for(pr=books.begin();pr != books.end();pr++)/*begin()返回books[o]的地址,end()返回最后一个元素后面的那个 元素的地址*/
			ShowReview(*pr);
		vector<Review> oldlist(books);
		if(num>3)
		{
			//Remove two items
			books.erase(books.begin()+1,books.begin()+3);/*erase()删除矢量中给定区间的元素,这里删除的是元素books[1]和books[2] ,注意范围*/
			cout<<"After erasure:\n";
			for(pr=books.begin();pr != books.end();pr++)
				ShowReview(*pr);
			//insert 1 item
			books.insert(books.begin(),oldlist.begin()+1,oldlist.begin()+2);//insert()功能和erase()相反
			cout<<"After insertion:\n";
			for(pr=books.begin();pr != books.end();pr++)
				ShowReview(*pr);
		}
		books.swap(oldlist);//交换两个容器类
		cout<<"Swapping oldlist with books:\n";
		for(pr=books.begin();pr != books.end();pr++)
			ShowReview(*pr);
	}
	else
		cout<<"Nothing entered,nothing gained.\n";
	return 0;
}





原文地址:https://www.cnblogs.com/jck34/p/2713642.html