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


    
    
  • 相关阅读:
    算法之递归
    初读 c# IL中间语言
    sql语句转为Model
    WPF-悬浮窗(类似于360)
    call,apply
    作用域题目
    css BFC
    数组扁平化 flatten
    常见的异步题
    setTimeout、Promise、Async/Await 的区别
  • 原文地址:https://www.cnblogs.com/jck34/p/2713642.html
Copyright © 2020-2023  润新知