zoukankan      html  css  js  c++  java
  • 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() != '
    ')
     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 }
  • 相关阅读:
    每天一道算法题(13)——使用递归颠倒栈
    每天一道算法题(12)——和为n的连续正数序列或者随机数
    函数模板
    答题总结(1)
    顶点间最短路径长度之探寻算法
    最小生成树
    new与delete,malloc与free
    C++的继承与接口
    笔记13 AOP中After和AfterReturning的区别
    笔记12 注入AspectJ切面
  • 原文地址:https://www.cnblogs.com/LYF-LIUDAO/p/7049060.html
Copyright © 2011-2022 走看看