集合和数组保存对象的引用变量(区别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;
}
原文地址:https://www.cnblogs.com/lijunamneg/p/2969901.html