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


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

    下面一个例子加以说明:

    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;
    }
  • 相关阅读:
    WIN10平台下基于Anaconda环境的pyOpt安装
    「Java分享客栈」随时用随时翻:微服务链路追踪之zipkin搭建
    【Java分享客栈】未来迈向高级工程师绕不过的技能:JMeter压测
    全网唯一 | 互联网公司微信支付宝服务商入驻流程图文指南
    shellcode编写
    C语言函数调用栈
    栈溢出基础
    Git学习笔记
    mixer类型 DAPM kcontrol 写流程
    BE dailink fixup callback函数
  • 原文地址:https://www.cnblogs.com/lijunamneg/p/2969901.html
Copyright © 2020-2023  润新知