作业帮 > 语文 > 作业

vector *p1=new vector(10); vector *p2=new vector[10];

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:语文作业 时间:2024/05/16 20:54:50
vector *p1=new vector(10); vector *p2=new vector[10];
请大神解释这两句分别的意思,好让我分清楚有什么不同.第一个表达式应该是分配十个string空间,p1指向10个空string,可以用*p1[0]访问第一个空指针吗?第二个就不是很懂了,
vector *p1=new vector(10); vector *p2=new vector[10];
vector *p1=new vector(10);
产生并赋予p1:1个vector对象和对应的空间,该vector有10个string空间;
vector *p2=new vector[10];
产生并赋予p2:10个vector对象和对应的空间,每个vector有默认个string空间;
======
另外,C++的STL容器,包括vector和string,本身的空间都是在堆中,本身就是一种类似指针.
不适合也没必要再在外面vector *p1;再用一次指针,没有实际功用而且容易造成混淆.
C++的发明人推荐这些工具就是要避免用指针.C++整体上大多数情况也可以避免指针.
再问: 我们老师也说过指针对c++不重要,但是你至少要看明白别人写的程序吧。 vector *p1 = new vector[10];就是一个两维数组,等价于string s1[10][...未初始]; 我也是这样理解的,请问这样理解对吗?可以用*p1[0]访问第一个空指针吗?
再答: 只能说感觉上像string的二维数组,但不是。C语言中狭义的二维数组的空间是连续的,这vector装的string和vector本身空间不连续。所以更近似于“指针的数组 char *p[]”或“数组的数组”。 具体是同前贴,vector *p1 = new vector[10];是一维上10个vector对象空间, 每个vector可用来装不定数的string,或可看成vector的一维数组; 实际应用上除了一些基础算法很少运用到2维或多维数组。因为有太多的更优的数据结构可以用来解决具体问题。