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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM