//在刚学结构链表的时候,我就想,应该能把几个链表的首指针放在 一个指针数组里。而这个指针数组
//则又是另一个链表的某个元素。学习完容器之后,发现,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!
总结经验,无论多么深的容器嵌套,只用把它和外面一层的勾通做好,就一切大吉了!
分享到:
相关推荐
当我们需要在一个应用中同时使用这些组件,特别是进行多重嵌套时,会面临一些挑战和优化点。下面将详细探讨这个主题。 **SwipRefreshLayout** `SwipRefreshLayout`是Google提供的一个下拉刷新的组件,通常用于顶部...
当我们面临"ViewPage 多重嵌套"这样的需求时,通常是为了构建更复杂的交互场景,比如在一个`ViewPage`内嵌入另一个`ViewPage`,形成一个多层导航的效果。下面我们将详细探讨如何实现`ViewPage`的多重嵌套,以及在这...
在多重嵌套中,`popover`可以作为其他组件的一部分出现,提供更详细的解释或操作指南。 2. **Dropdown(下拉菜单)**: `dropdown`是常见的导航元素,用于展示一系列相关的链接或操作。在`popwind`中,你可以嵌套多...
它允许我们逐个处理容器中的元素,而无需显式地指定索引。这种循环结构尤其适合迭代处理数组的每个元素,而无需关心其具体下标。 首先,让我们了解多重循环的工作原理。例如,假设我们有两个向量A和B,我们想要计算...
首先,传统的嵌套div方法是一种兼容性极好的方式,通过在父元素div内部嵌套子元素div来实现多重边框。这种方法的原理是在父元素设置外层边框,而子元素设置内层边框。优点是兼容性好,缺点是修改HTML结构成本较高,...
15. 容器:容器可以嵌套其他容器,用于组织组件。 16. 大小写敏感:Java是大小写敏感的语言。 17. 主类:Java程序可定义多个类,但只有一个主类,用`public static void main(String[] args)`标识。 18. 方法覆盖...
这为创建灵活的多层布局提供了可能,如下框架嵌套上框架或者多重嵌套框架。 了解框架的源码对于理解其工作原理至关重要。HTML中的和标签分别定义了框架集和框架。的rows和cols属性用于定义框架的分割方式和大小,...
3. **跳出多重嵌套循环**:在 Java 中,可以使用带标签的 `break` 语句来跳出多重循环,例如 `break label;`,这在某些情况下可以替代 `goto`。然而,这种做法并不推荐,因为它可能使代码变得复杂不易理解。 4. **`...
- 容器:容器可以嵌套其他容器,用来组织界面组件。 16. **访问控制符**: - `private`和`protected`:`private`仅限本类访问,`protected`允许本类、同包类和子类访问。 17. **字符串操作**: - `toString()`...
- 容器可以嵌套使用,一个容器内部可以包含其他容器,这有助于复杂界面的设计。 23. **Java对大小写的敏感性:** - 错误。 - Java是区分大小写的语言。例如,“Variable”和“variable”是两个不同的标识符。 ...
- 容器结构:容器可以嵌套其他容器以构建复杂的组件层次。 23. **大小写敏感**: - 语言特性:Java是大小写敏感的语言,标识符的大小写有区别。 24. **源码与字节码**: - 类与字节码文件:重复题目,Java源码...
35. 容器嵌套:容器可以嵌套其他容器以实现复杂的布局。 选择题部分: 1. 私有访问控制符 `private` 修饰的成员变量只能被该类自身访问和修改。 2. 同上,`private` 只能被类自身访问和修改。 3. 保护访问控制符...
32. **容器**:容器可以嵌套其他容器,用于组织组件。 33. **访问控制符**:`private`修饰的成员只能在本类中访问,`protected`可以在同一包的类和子类中访问。 34. **对象创建**:对于字符串常量,Java会自动优化...
35. **容器组件**:容器可以嵌套其他容器,以构建复杂的界面结构。 选择题答案: 1. C. 只能被该类自身所访问和修改 2. C. 只能被该类自身所访问和修改 3. A. 可以被三种类所引用:该类自身、与它在同一个包中的...
13. 高级主题,包括运行时类型识别、类成员指针、嵌套类、联合和局部类等。 此外,书籍的附录部分还提供了标准库的详细信息,帮助读者更好地使用标准库中的功能和工具。索引部分则允许读者快速查找书中的关键词汇和...
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 ...
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 ...
35. **容器组件**:容器可以嵌套其他容器,用于组织和布局组件。 选择题解答: 1. **private protected**:C.只能被该类自身所访问和修改。 2. **String对象创建**:B.1个对象,因为"bc"是字符串常量池中的共享...
22. 容器与组件:在Swing中,容器可以嵌套,即一个容器可以包含其他容器或组件。 23. 构造器:一个类可以有多个构造器,这被称为构造器重载。 24. 单重继承:Java的类支持单重继承,即一个类只能直接继承一个父类...
27. **容器嵌套** - `JPanel`可以嵌套在另一个`JPanel`中,这种做法非常常见,用于构建复杂的用户界面布局。 28. **菜单创建** - 创建菜单需要一个`JMenuBar`对象,然后将菜单项添加到`JMenuBar`中,再将`...