
vector<string> *p1=new vector<string>(10); vector<string> *p2=new vector<string>[10]; 求大神解释!
请大神解释这两句分别的意思,好让我分清楚有什么不同。第一个表达式应该是分配十个string空间,p1指向10个空string,可以用*p1[0]访问第一个空指针吗?第二个...
请大神解释这两句分别的意思,好让我分清楚有什么不同。第一个表达式应该是分配十个string空间,p1指向10个空string,可以用*p1[0]访问第一个空指针吗?第二个就不是很懂了,谢谢大神!
展开
4个回答
展开全部
vector<string> *p1=new vector<string>(10);
产生并赋予p1:1个vector对象和对应的空间,该vector有10个string空间;
vector<string> *p2=new vector<string>[10];
产生并赋予p2:10个vector对象和对应的空间,每个vector有默认个string空间;
======
另外,C++的STL容器,包括vector和string,本身的空间都是在堆中,本身就是一种类似指针。
不适合也没必要再在外面vector<string> *p1;再用一次指针,没有实际功用而且容易造成混淆。
C++的发明人推荐这些工具就是要避免用指针。C++整体上大多数情况也可以避免指针。
产生并赋予p1:1个vector对象和对应的空间,该vector有10个string空间;
vector<string> *p2=new vector<string>[10];
产生并赋予p2:10个vector对象和对应的空间,每个vector有默认个string空间;
======
另外,C++的STL容器,包括vector和string,本身的空间都是在堆中,本身就是一种类似指针。
不适合也没必要再在外面vector<string> *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维或多维数组。因为有太多的更优的数据结构可以用来解决具体问题。
展开全部
错也,第一个是动态分配一个vector<string>指针,并赋初值为10;
第二个才是动态分配10个vector<string>实例的数组,p2指向该数组的首地址
类似:
int *p = new int(10);
in *p = new int[10];
第二个才是动态分配10个vector<string>实例的数组,p2指向该数组的首地址
类似:
int *p = new int(10);
in *p = new int[10];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果以一个数组来喻vector,那么,
vector<string> *p1 = new vector<string>(10); 就是一个一维数组,等价于string p1[10];只是vector<string>更灵活。
而
vector<string> *p1 = new vector<string>[10];就是一个两维数组,等价于string s1[10][...未初始];
vector<string> *p1 = new vector<string>(10); 就是一个一维数组,等价于string p1[10];只是vector<string>更灵活。
而
vector<string> *p1 = new vector<string>[10];就是一个两维数组,等价于string s1[10][...未初始];
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一个是分配10个空间,第二个我是这样理解 的
vector<string> *p2=new vector<string>[10];
这儿是调用 的[]这个操作符,在这儿没有什么意义,如果你学过函数对象或者说是仿函数,你就应该知道我说的什么意思 ,不知道理解的对不对
vector<string> *p2=new vector<string>[10];
这儿是调用 的[]这个操作符,在这儿没有什么意义,如果你学过函数对象或者说是仿函数,你就应该知道我说的什么意思 ,不知道理解的对不对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询