容器的多重嵌套

//在刚学结构链表的时候,我就想,应该能把几个链表的首指针放在 一个指针数组里。而这个指针数组//则又是另一个链表的某个元素。学习完容器之后,发现,C++的容器更容易实现这样的操作。//可是,当我把含有容器的对象,放进另一个容器的时候,问题出现了。我不知道应该怎么来访问最里//面 容器的元素。这是我逻辑上的一个误区。 今天解决了,按照老师的指点,彻底明白了问题的关键我们先要考虑的是,如果把外面的容器扔掉,怎么来访问这个对象的容器元素。首先发现,这个容器里的对象,不是外部可以访问的,必须在类的定义里,给我加一个成员函数来操作这个容器,好了,我们先写一个带有容器的类。然后再写一个可以对容器进行操作的函数 class temp{protected:vector subject; //声明vector容器 public:int vec_return(int); //操作容器,返回某位置的值。int 为要访问的元素位置 }; int temp::vec_return (int a)//这是函数的实现, {if ((a = 0))//判断参数是否合理{return subject[a]; }else{cout << "参数不合理"< name_sub; vector可以用下标来访问元素,这个容器这个特点现在占了优势,让我们可以更容易的完成对其中的元素访问 。如果我们要访问,name_sub[4]第5个元素。这就是这个元素了,这个元素中的容器怎么访问呢 是 这样的name_sub[4].vec_return(5); 。。。这好使吗。。我们来试试 #include #include using namespace std; class temp{protected:vector subject; public:intvec_return(int); //操作容器,返回某位置的值。int 为要访问的元素位置 temp ()//构造函数 {for (int i=0; i<9; i++){subject.push_back(i); }} }; int temp::vec_return (int a)//这是函数的实现, {if ((a = 0))//判断参数是否合理{return subject[a]; }else{cout << "参数不合理"<name_sub(10); cout << name_sub[4].vec_return(5)< subject; //声明list容器 public:temp ()//构造函数 {for (int i=0; i<9; i++){subject.push_back(i); }} ~temp(){}intlist_return(int); //操作容器,返回某位置的值。int// 为要访问的元素位置 }; intlist_return(int a)//函数的实现 //这里有点问题,list容器,不能直接用下标访问 //所以,我们先建一个迭代,然后控制迭代访问 {list ::iterator itr=subject.begin(); if ((a = 0))//判断参数是否合理 {for (int i=0; i!=a; ++i)//参数合理,就把迭代指向所需元素; {itr++; }}else// 不合理退出 {cout << "参数错误"<name_subject; 唉,list不支持下标访问。因为不是顺序容器。。我们必须给它建一个迭代器来访问它list ::iterator itr=name_subject.begin(); 然后对这个迭代指向的元素进行操作; itr->list_return(6) 哈哈!代码好像比vector漂亮; 试一试的时间到了!!! #include #include using namespace std; class temp{protected:list subject; //声明list容器 public:temp ()//构造函数 {for (int i=0; i<9; i++){subject.push_back(i); }} ~temp(){}intlist_return(int); //操作容器,返回某位置的值。int// 为要访问的元素位置 }; inttemp::list_return (int a)//函数的实现 //这里有点问题,list容器,不能直接用下标访问 //所以,我们先建一个迭代,然后控制迭代访问 {list ::iterator itr=subject.begin(); if (a = 0)//判断参数是否合理 {for (int i=0; i!=a; ++i)//参数合理,就把迭代指向所需元素; {itr++; }}else// 不合理退出 {cout << "参数错误"< &name_sub,int a,int b)//为了方便,我建了一个函数来操作整个返回过程//name_sub为所要访问的容器引用 //int a为外层容器位置, int b为内层容器位置{list ::iterator itr=name_sub.begin(); //建迭代准备访问; if (a = 0)//判断参数是否合理 {for (int i=0; i!=a; ++i)//参数合理,就把迭代指向所需元素; {itr++; }}else// 不合理退出 {cout << "参数错误"<list_return(b); }int main(){list name_sub(10); cout << output(name_sub, 6,4)<

    推荐阅读