• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

集合和数组保存对象的引用变量(区别C++的STL实现)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一个基本概念:
数组可以保存基本类型的值和对象,而集合只可以保存对象,实际上说具体点应该是数组和集合都是保存的对象的引用变量,而不是具体的内存对象.

下面一个例子加以说明:

import java.util.ArrayList;

public class Test {
    static class Person{
        public Person(String n){
            name = n;
        }
        
        @Override
        public String toString() {
            return name;
        }
        
        public String name;
    }
    
    
    public static void main(String[] args) {
        System.out.println("test");
        
        Person p = new Person("aa");
        Person p1 = new Person("bb");
        
        ArrayList<Person> personList = new ArrayList<Test.Person>();
        personList.add(p);
        personList.add(p1);
        
        for (Person person : personList) {
            System.out.println(person); //输出 aa bb
        }
        
        p.name = "cc";
        
        for (Person person : personList) {
            System.out.println(person);//输出 cc bb
        }
    }
}

 

上面的这个例子我们一定要明确,因为JAVA的集合是保存的对象的引用变量,而不是具体内存对象,但是C++的STL容器就不一样了,
C++的STL 容器是在增加对象到容器时候,容器时会重新分配内存的来保存增加对象,我们通过下面的例子来说明C++容器内存相关:

#include <iostream>
#include <list>
#include <iterator>
#include <string>

using namespace std;

class Person
{
public:
    Person(string n):mName(n)
    {
    }

public:
    string mName;
};


int main()
{
    Person p("aa");
    Person p1("bb");

    list<Person> personList;
    personList.push_back(p);
    personList.push_back(p1);

    list<Person>::iterator it ;

    for(it = personList.begin();it != personList.end();it++){
        cout << (*it).mName << endl; //aa bb
    }

    p.mName = "cc";

    for(it = personList.begin();it != personList.end();it++){
        cout << (*it).mName << endl;//aa bb 
    }

    return 0;
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#属性(Attribute)用法实例解析发布时间:2022-07-13
下一篇:
c++STL中的vector与list为什么没有提供find操作?发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap