zoukankan      html  css  js  c++  java
  • 集合和数组保存对象的引用变量(区别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;
    }
  • 相关阅读:
    Azure SQL Storage
    T-SQL quries
    映射盘符
    繁体及其输入法、乱码问题
    匈牙利命名法
    C++四种转换总结
    windows系统下进程间通信
    Qt 中文字符串问题
    PDB文件详解
    DbgView 无法开启Capture Kernel问题
  • 原文地址:https://www.cnblogs.com/lijunamneg/p/2969901.html
Copyright © 2011-2022 走看看