C++ 和JAVA 中对容器传值的方式 、容器和类变量初始化
C++向容器传值(即拷贝内容)
eg:将vector传入map,然后修改这个vector,map中的vector不会改变
int main()
{
vector<int> t;
t.push_back(1);
map<int ,vector<int> > mp;
mp[2]=t;
t.clear();
cout<<mp[2].size()<<" "<<mp[2][0];
return 0;
}
Java 向容器传引用
eg:将vector传入map,然后修改这个vector,map中的vector会改变
public class Main {
static int N=1000005,cnt,INF=0x3f3f3f3f;
public static void main(String args[]){
// Scanner sc=new Scanner(System.in);
Map<Integer,List<Integer>> mp=new HashMap<>();
List<Integer> t=new ArrayList<>();
t.add(1);
mp.put(1, t);
//t.clear();
System.out.println(mp.get(1).size());
}
}
C++容器和类变量初始化
容器
vector<int> v;容器自动分配了内存,但是大小为0,等价于下一行,不能按照下标赋值,但是可以调用push_back();
vector<int> v=vector<int>();手动分配了内存但是大小为0,赋值操作v[1]=1会出错
vector<int> v=vector<int>(10);手动分配了内存且大小为10,赋值操作v[1]=1可行
c++前面后面的类型都不能省略,必须指定,而Java可以省略后面的类型
普通的类变量
class node{
public :
int num=1;
};
int main()
{
node t;
cout<<t.num; 结果为1
return 0;
}
说明类类型的变量声明时也会自动分配内存
Java
容器类
Vector<Integer> v;
Vector<Integer> v=new Vector<>();
等价于Vector<Integer> v=new Vector();
即前面必须制定元素类型,后面不必须
上面都是分配了内存,且大小为0
等同于C++:
vector<int> v;和vector<int> v=vector<int>();
类变量
class node
{
public int num=10;
}
总结:
C++的类变量和和容器变量都会在声明时自动分配内存,不论是全局变量还是局部变量
Java类变量和容器变量不会声明时自动分配内存,需要手动分配,而手动分配不指定大小时同C++自动分配
一般用法
c++自动分配,java手动分配内存
C++:
vector<int > v;
Java
Vector<Integer> v=new Vector();