LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 717|回复: 5

请问这两个定义的不同之处

[复制链接]
发表于 2003-9-15 18:39:35 | 显示全部楼层 |阅读模式
  1. vector<string> *pvec1 = new vector<string>(10);
  2. vector<string> *pvec2 = new vector<string>[10];
复制代码

小括号和中括号在这里的作用一样吗?
怎样使用指针pvec1、pvec2给定义的的数组(元素)赋值?
发表于 2003-9-15 19:14:22 | 显示全部楼层
?????
为什么要new

使用STL的原因就是因为STL可以方便的管理内存
你看看他们的 构造函数()
和opratore []
区别

我觉得这两个是不一样
第二个是定义10个vector<string>[
第一个是定义可以保存10个string元素的vector
发表于 2003-9-15 19:14:38 | 显示全部楼层
实在不行就指指看
 楼主| 发表于 2003-9-15 21:23:09 | 显示全部楼层
我试过了。不过实在不明白。这个例子出自C++ Primer的一个问题。
我是这样使用这两个指针的:
  1. 1.pvec1->at(0)="Hello world.";
  2. 2.pvec2->at(0)="Hello world.";
复制代码
对于pvec1的使用可以正常赋值。但是pvec2就不行,可以编译通过,但是执行的时候,就提示“已放弃”,可能是下标越界了???

真是摸不着头脑。
发表于 2003-9-15 21:56:31 | 显示全部楼层
vector<string> *pvec1 = new vector<string>(10);
vector<string> *pvec2 = new vector<string>[10];

是可以的。但意思完全不同。意思就是无双讲的。

vector<string> *pvec1 = new vector<string>(10);
a pointer point to a vector which contains 10 elements, each element is a string.
括号() 的作用就在与此。

vector<string> *pvec2 = new vector<string>[10];
just like:
char *parr = new char[10];
意思是: pointer parr point to a unamed array which contains 10 elements, each is a character.
所以第二句可以这样理解:
vector<string> *pvec2 = new vector<string>[10];
pointer pvec2 point to a unamed array which contains 10 element,each element is a vector including strings.
注意每个 vector 中的元素都是 string.
如果想要指定 vector's size,即它能包含的 string 的个数 :
for (int i = 0; i < 10; ++i) { std::cout << pvec2.size() << std::endl; }

这是我的浅陋理解。
 楼主| 发表于 2003-9-15 22:16:30 | 显示全部楼层
谢谢大家啦!
呵呵,又懂了许多问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表