vector讲一个容器的内容拷贝到另一个容器,容器的区间删除

1、容器的区间删除

假设有容器Vector<double>scores;

如果删除第一个元素

scores.erase(scores.begin() , scores.begin() + 1);

删除第二个元素

scores.erase(scores.begin() + 1 , scores.begin() + 2);

删除前两个元素

scores.erase(scores.begin() , scores.begin() + 2);

erase的删除区间是[p1,p2)包括p1,但是不包括p2,如上述例子中删除前两个元素,删除的元素是第一个和第二个,但是不包括第三个元素scores.begin() + 2

2、将一个容器的内容拷贝到另一个容器中

(1)C++提供了一个容器的默认拷贝构造函数,可以完全拷贝,也就是完全复制一个相同的容器

比如说有容器vector<Review>books,这时候我们可以完全复制一个相同的容器vector<Review>oldlist(books);此时容器oldlist就是一个和books完全一样的容器。

(2)将一个容器的内容部分插入到另一个容器中

两个容器:Vector<int>old_v

     Vector<int>new_v

old_v.insert(old_v.begin(), new_v.begin(), new_v.end() );

其中new_v.begin(), new_v.end()为插入的区间,old_begin()为要插入的地址。也就是你要把哪部分内容(new_v.begin(), new_v.end()区间的内容,待插入的新容器的内容),插入到哪里去(old_v.begin()为要插入的地址,就是你要插入到哪个容器的什么位置)。

示例代码:

main.cpp

  1 #include <iostream>
  2 #include <string>
  3 #include <vector>
  4 
  5 struct Review
  6 {
  7     std::string title;
  8     int rating;
  9 };
 10 
 11 bool FillReview(Review &rr);
 12 void ShowReview(const Review &rr);
 13 int main()
 14 {
 15     std::vector<Review>books;
 16     Review temp;
 17 
 18     while (true)
 19     {
 20         if (FillReview(temp))
 21         {
 22             books.push_back(temp);
 23         }
 24         else
 25         {
 26             break;
 27         }
 28     }
 29 
 30         int nums = books.size();
 31         if (nums > 0)
 32         {
 33             for (int i = 0; i < nums; i++)
 34             {
 35                 ShowReview(books[i]);
 36             }
 37             std::vector<Review>::iterator ptr;
 38             for (ptr = books.begin(); ptr != books.end(); ptr++)
 39             {
 40                 ShowReview(*ptr);
 41             }
 42 
 43             std::cout<<"移除第二个元素"<<std::endl;
 44             std::vector<Review>oldlist(books);//copy consturctor used
 45             if (nums > 3)
 46             {
 47                 //移除第二个元素
 48                 books.erase(books.begin() + 1, books.begin() + 2);
 49             }
 50             //输出看移除之后的结果
 51             for (ptr = books.begin(); ptr != books.end(); ptr++)
 52             {
 53                 ShowReview(*ptr);
 54             }
 55 
 56             std::cout<<"插入一个元素"<<std::endl;
 57             //将oldlist的第二个元素插在books的首位
 58             //本程序重点
 59             books.insert(books.begin()+ 1,oldlist.begin() + 1, oldlist.begin() + 2);
 60             std::cout<<"After inserttion"<<std::endl;
 61 
 62             //输出看插入之后的结果
 63             for (ptr = books.begin(); ptr != books.end(); ptr++)
 64             {
 65                 ShowReview(*ptr);
 66             }
 67 
 68         }
 69         else
 70         {
 71             std::cout<<"Nothing entered"<<std::endl;
 72         }
 73 
 74     return 0;
 75 }
 76 
 77 bool FillReview(Review &rr)
 78 {
 79     std::cout<<"Enter book title (quit to quit)"<<std::endl;
 80     getline(std::cin,rr.title);
 81     if (rr.title == "quit")
 82     {
 83         return false;
 84     }
 85 
 86     std::cout<<"Enter book rating"<<std::endl;
 87     std::cin>>rr.rating;
 88     if (!std::cin)
 89     {
 90         return false;
 91     }
 92 
 93     while (std::cin.get() != '\n')
 94     {
 95         continue;
 96     }
 97 
 98     return true;
 99 }
100 
101 void ShowReview(const Review &rr)
102 {
103     std::cout<<"rr.rating : "<<rr.rating<<std::endl<<"rr.title : "<<rr.title<<std::endl;
104 }

 

posted @ 2017-06-19 15:54  冥天笑  阅读(3963)  评论(0编辑  收藏  举报