`
20386053
  • 浏览: 461499 次
文章分类
社区版块
存档分类
最新评论

容器的多重嵌套

 
阅读更多
//在刚学结构链表的时候,我就想,应该能把几个链表的首指针放在 一个指针数组里。而这个指针数组

//则又是另一个链表的某个元素。学习完容器之后,发现,C++的容器更容易实现这样的操作。

//可是,当我把含有容器的对象,放进另一个容器的时候,问题出现了。我不知道应该怎么来访问最里

//面 容器的元素。这是我逻辑上的一个误区。 今天解决了,按照老师的指点,彻底明白了问题的关键





我们先要考虑的是,如果把外面的容器扔掉,怎么来访问这个对象的容器元素。



首先发现,这个容器里的对象,不是外部可以访问的,必须在类的定义里,给我加



一个成员函数来操作这个容器,好了,我们先写一个带有容器的类。然后再写一个可以对



容器进行操作的函数 



class temp

{

      protected:

                

                vector <int> subject;      //声明vector容器 

      public:

             

                int vec_return(int);       //操作容器,返回某位置的值。int 为要访问的元素位置 

};



int temp::vec_return (int a)                           //这是函数的实现, 



{

            

                 if ((a <subject.size())&&(a >= 0))      //判断参数是否合理            

                 {

                       return subject[a];

                 }

                 else

                 {

                     cout << "参数不合理"<<endl;

                 }

return -1;

}



好了,我们现在完全可以在外面用vec_return函数来访问类里的vector中的元素;



现在我们把最外面的容器加上。



vector <temp> name_sub;





vector可以用下标来访问元素,这个容器这个特点现在占了优势,让我们可以更



容易的完成对其中的元素访问 。



如果我们要访问,name_sub[4]第5个元素。这就是这个元素了,



这个元素中的容器怎么访问呢 



是 这样的



name_sub[4].vec_return(5);



。。。这好使吗。。我们来试试 

 

#include <iostream>



#include <vector>



using namespace std;





class temp

{

      protected:

                

                vector <int> subject;

      public:

             

                int  vec_return(int);       //操作容器,返回某位置的值。int 为要访问的元素位置 

                

                temp ()                     //构造函数 

                {

                                          

                     for (int i=0;  i<9;   i++)

                     {

                         subject.push_back(i);

                     }

                     

                } 

                

                             

                

};



int temp::vec_return (int a)                           //这是函数的实现, 



{

            

                 if ((a <subject.size())&&(a >= 0))      //判断参数是否合理            

                 {

                       return subject[a];

                 }

                 else

                 {

                     cout << "参数不合理"<<endl;

                 }

return -1;

}



int main()

{

    vector <temp>  name_sub(10);

    

    cout << name_sub[4].vec_return(5)<<endl;

    

    cin.get();

    

    return 0;

}



哈,运行成功!!^_^





顺序容器这么访问真方便,加一点点难度,用list再练习练习,



我们把里面和外面的容器全搞成list的 

 



我们先写一个带有list容器的类



class temp

{

      protected:

                

                list <int> subject;      //声明list容器 

      public:

             

                temp ()                     //构造函数 

                {

                                          

                     for (int i=0;  i<9;   i++)

                     {

                         subject.push_back(i);

                     }

                     

                } 

                

                

                ~temp(){}

                

                int  list_return(int);    //操作容器,返回某位置的值。int

                                         // 为要访问的元素位置 

};



int  list_return(int a)                   //函数的实现 

                                         //这里有点问题,list容器,不能直接用下标访问 

                                         //所以,我们先建一个迭代,然后控制迭代访问 

{

      list <int>::iterator itr=subject.begin();

      

      

      

                      

      if ((a <subject.size()) && (a >= 0))      //判断参数是否合理 

      {

         for (int i=0;  i!=a;  ++i)          //参数合理,就把迭代指向所需元素; 

         {

             itr++;

         }

      }

      else                                   // 不合理退出 

      {

          cout << "参数错误"<<endl;

          return -1;

      }

return *itr;                                 //返回所需要元素值; 

}



现在完成了在类外面怎么访问这个list容器。



现在应该是给这个类外面再套一个容器的时候了。



list <temp>  name_subject;



唉,list不支持下标访问。因为不是顺序容器。。我们必须给它建一个迭代器来访问它





list <temp>::iterator itr=name_subject.begin();





然后对这个迭代指向的元素进行操作;



itr->list_return(6) 



哈哈!代码好像比vector漂亮;



试一试的时间到了!!!

 

#include <iostream>



#include <list>



using namespace std;



class temp

{

      protected:

                

                list <int> subject;      //声明list容器 

      public:

             

                temp ()                     //构造函数 

                {

                                          

                     for (int i=0;  i<9;   i++)

                     {

                         subject.push_back(i);

                     }

                     

                } 

                

                

                ~temp(){}

                

                int  list_return(int);    //操作容器,返回某位置的值。int

                                         // 为要访问的元素位置 

};





int  temp::list_return (int a)            //函数的实现 

                                         //这里有点问题,list容器,不能直接用下标访问 

                                         //所以,我们先建一个迭代,然后控制迭代访问 

{

      list <int>::iterator itr=subject.begin();

      

      

      

                      

      if (a <subject.size() && a >= 0)       //判断参数是否合理 

      {

         for (int i=0;  i!=a;  ++i)          //参数合理,就把迭代指向所需元素; 

         {

             itr++;

         }

      }

      else                                   // 不合理退出 

      {

          cout << "参数错误"<<endl;

          return -1;

      }

      

return *itr;                                 //返回所需要元素值; 

}





int output (list <temp> &name_sub,  int a,  int b)   //为了方便,我建了一个函数来操作整个返回过程

                                                     //name_sub为所要访问的容器引用 

                                                     //int a为外层容器位置, int b为内层容器位置

{



      list <temp>::iterator itr=name_sub.begin();    //建迭代准备访问;  

        

      if (a <name_sub.size() && a >= 0)              //判断参数是否合理 

      {

   

                  

         for (int i=0;  i!=a;  ++i)                  //参数合理,就把迭代指向所需元素; 

         {

             itr++;

         }

      }

      else                                           // 不合理退出 

      {

          cout << "参数错误"<<endl;

          return -1;

      }

      

return itr->list_return(b);



}





int main()



{

    list <temp> name_sub(10);

    

    

    cout << output(name_sub, 6,  4)<<endl;

    

    cin.get();

return 0;

}



运行成功!!happy!





总结经验,无论多么深的容器嵌套,只用把它和外面一层的勾通做好,就一切大吉了! 

分享到:
评论

相关推荐

    Android-一个多重嵌套:SwipRefreshLayout->RecyclerView->ViewPager->RecyclerView

    当我们需要在一个应用中同时使用这些组件,特别是进行多重嵌套时,会面临一些挑战和优化点。下面将详细探讨这个主题。 **SwipRefreshLayout** `SwipRefreshLayout`是Google提供的一个下拉刷新的组件,通常用于顶部...

    viewpage 多重嵌套

    当我们面临"ViewPage 多重嵌套"这样的需求时,通常是为了构建更复杂的交互场景,比如在一个`ViewPage`内嵌入另一个`ViewPage`,形成一个多层导航的效果。下面我们将详细探讨如何实现`ViewPage`的多重嵌套,以及在这...

    多重popwind组合嵌套使用

    在多重嵌套中,`popover`可以作为其他组件的一部分出现,提供更详细的解释或操作指南。 2. **Dropdown(下拉菜单)**: `dropdown`是常见的导航元素,用于展示一系列相关的链接或操作。在`popwind`中,你可以嵌套多...

    MATLAB工具箱大全-将多重循环转为单重循环-For-Each

    它允许我们逐个处理容器中的元素,而无需显式地指定索引。这种循环结构尤其适合迭代处理数组的每个元素,而无需关心其具体下标。 首先,让我们了解多重循环的工作原理。例如,假设我们有两个向量A和B,我们想要计算...

    CSS3实现多重边框的方法总结

    首先,传统的嵌套div方法是一种兼容性极好的方式,通过在父元素div内部嵌套子元素div来实现多重边框。这种方法的原理是在父元素设置外层边框,而子元素设置内层边框。优点是兼容性好,缺点是修改HTML结构成本较高,...

    java程序设计习题集含答案.doc

    15. 容器:容器可以嵌套其他容器,用于组织组件。 16. 大小写敏感:Java是大小写敏感的语言。 17. 主类:Java程序可定义多个类,但只有一个主类,用`public static void main(String[] args)`标识。 18. 方法覆盖...

    通过DreamweaverCS学习HTMLDIVCSS网页框架PPT学习教案.pptx

    这为创建灵活的多层布局提供了可能,如下框架嵌套上框架或者多重嵌套框架。 了解框架的源码对于理解其工作原理至关重要。HTML中的和标签分别定义了框架集和框架。的rows和cols属性用于定义框架的分割方式和大小,...

    面试题JavaSE语法.docx

    3. **跳出多重嵌套循环**:在 Java 中,可以使用带标签的 `break` 语句来跳出多重循环,例如 `break label;`,这在某些情况下可以替代 `goto`。然而,这种做法并不推荐,因为它可能使代码变得复杂不易理解。 4. **`...

    语言程序设计资料:《Java语言程序设计》期末复习题.doc

    - 容器:容器可以嵌套其他容器,用来组织界面组件。 16. **访问控制符**: - `private`和`protected`:`private`仅限本类访问,`protected`允许本类、同包类和子类访问。 17. **字符串操作**: - `toString()`...

    Java程序设计习题集(含答案).doc

    - 容器可以嵌套使用,一个容器内部可以包含其他容器,这有助于复杂界面的设计。 23. **Java对大小写的敏感性:** - 错误。 - Java是区分大小写的语言。例如,“Variable”和“variable”是两个不同的标识符。 ...

    java程序习题练习集

    - 容器结构:容器可以嵌套其他容器以构建复杂的组件层次。 23. **大小写敏感**: - 语言特性:Java是大小写敏感的语言,标识符的大小写有区别。 24. **源码与字节码**: - 类与字节码文件:重复题目,Java源码...

    java程序设计考试题

    35. 容器嵌套:容器可以嵌套其他容器以实现复杂的布局。 选择题部分: 1. 私有访问控制符 `private` 修饰的成员变量只能被该类自身访问和修改。 2. 同上,`private` 只能被类自身访问和修改。 3. 保护访问控制符...

    java语言程序设计

    32. **容器**:容器可以嵌套其他容器,用于组织组件。 33. **访问控制符**:`private`修饰的成员只能在本类中访问,`protected`可以在同一包的类和子类中访问。 34. **对象创建**:对于字符串常量,Java会自动优化...

    java期末考试题汇编.pdf

    35. **容器组件**:容器可以嵌套其他容器,以构建复杂的界面结构。 选择题答案: 1. C. 只能被该类自身所访问和修改 2. C. 只能被该类自身所访问和修改 3. A. 可以被三种类所引用:该类自身、与它在同一个包中的...

    C++ Primer第四版【中文高清扫描版】.pdf

    13. 高级主题,包括运行时类型识别、类成员指针、嵌套类、联合和局部类等。 此外,书籍的附录部分还提供了标准库的详细信息,帮助读者更好地使用标准库中的功能和工具。索引部分则允许读者快速查找书中的关键词汇和...

    C++ Primer中文版(第5版)李普曼 等著 pdf 1/3

     9.3.6 容器操作可能使迭代器失效 315  9.4 vector对象是如何增长的 317  9.5 额外的string操作 320  9.5.1 构造string的其他方法 321  9.5.2 改变string的其他方法 322  9.5.3 string搜索操作 325  9.5.4 ...

    C++Primer(第5版 )中文版(美)李普曼等著.part2.rar

     9.3.6 容器操作可能使迭代器失效 315  9.4 vector对象是如何增长的 317  9.5 额外的string操作 320  9.5.1 构造string的其他方法 321  9.5.2 改变string的其他方法 322  9.5.3 string搜索操作 325  9.5.4 ...

    Java复习资料

    35. **容器组件**:容器可以嵌套其他容器,用于组织和布局组件。 选择题解答: 1. **private protected**:C.只能被该类自身所访问和修改。 2. **String对象创建**:B.1个对象,因为"bc"是字符串常量池中的共享...

    java判断题.doc

    22. 容器与组件:在Swing中,容器可以嵌套,即一个容器可以包含其他容器或组件。 23. 构造器:一个类可以有多个构造器,这被称为构造器重载。 24. 单重继承:Java的类支持单重继承,即一个类只能直接继承一个父类...

    《Java程序设计》练习题

    27. **容器嵌套** - `JPanel`可以嵌套在另一个`JPanel`中,这种做法非常常见,用于构建复杂的用户界面布局。 28. **菜单创建** - 创建菜单需要一个`JMenuBar`对象,然后将菜单项添加到`JMenuBar`中,再将`...

Global site tag (gtag.js) - Google Analytics