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() != ' ') 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 }