c++关于动态数组的问题.
从标准输入设备读入的元素数据建立一个int型vector对象,然后动态创建一个与该vector对象大小一致的数组,把vector对象的所有元素复制给新数组。(c++pri...
从标准输入设备读入的元素数据建立一个int型vector对象,然后动态创建一个与该vector对象大小一致的数组,把vector对象的所有元素复制给新数组。(c++primer习题4.28)
标准答案为
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> ivec;
int ival;
//输入元素数据并建立vector
cout << "Enter numbers:(Ctrl + Z to end)" << endl;
while(cin >> ival)
ivec.push_back(ival);
//动态创建数组
int *pia = new int[ivec.size()];
//复制元素
int *tp = pia; // 为什么需要一个int指针呢?
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter, ++tp)
*pia = *iter;
//释放动态数组的内存
delete [] pia;
cout << "good2" << endl;
return 0;
}
我的问题是int *tp的作用是什么,如果不用它直接给动态数组赋值会怎样,然后自己改了下程序如下。
int main()
{
vector<int> ivec;
int ival;
cout << "Enter numbers:(Ctrl + Z to end)" << endl;
while(cin >> ival)
ivec.push_back(ival);
int *pia = new int[ivec.size()];
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter, ++pia)
{
*pia = *iter;
}
delete [] pia; // 出现错误。
return 0;
}
结果发现无法删除pia数组了。
难道直接给动态数组赋值的话,就变成非动态数组了吗?
还有就是为何需要那个int *lp指针的问题。
谢谢。 展开
标准答案为
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> ivec;
int ival;
//输入元素数据并建立vector
cout << "Enter numbers:(Ctrl + Z to end)" << endl;
while(cin >> ival)
ivec.push_back(ival);
//动态创建数组
int *pia = new int[ivec.size()];
//复制元素
int *tp = pia; // 为什么需要一个int指针呢?
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter, ++tp)
*pia = *iter;
//释放动态数组的内存
delete [] pia;
cout << "good2" << endl;
return 0;
}
我的问题是int *tp的作用是什么,如果不用它直接给动态数组赋值会怎样,然后自己改了下程序如下。
int main()
{
vector<int> ivec;
int ival;
cout << "Enter numbers:(Ctrl + Z to end)" << endl;
while(cin >> ival)
ivec.push_back(ival);
int *pia = new int[ivec.size()];
for(vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter, ++pia)
{
*pia = *iter;
}
delete [] pia; // 出现错误。
return 0;
}
结果发现无法删除pia数组了。
难道直接给动态数组赋值的话,就变成非动态数组了吗?
还有就是为何需要那个int *lp指针的问题。
谢谢。 展开
2个回答
展开全部
赋值后不会变成非动态数组。那是因为你在第二个程序中,对pia执行了++操作,for循环接受后,pia已经指向数组的末尾了,当然不能删除了。同样在第一个程序中定义的lp就是用来对pia数组进行循环赋值的,这样就可以保证不会丢失指向数组首地址的指针。而且第一个程序中,for循环里面的赋值语句应该是*tp=*iter。如果你不想再定义一个指针,可以定义个数组的索引i,然后这样赋值:*(pia+i)=*iter。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询