首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

动态数组输出脚后跟了一串“-842150451”,是什么原因呢

2013-03-10 
动态数组输出后跟了一串“-842150451”,是什么原因呢?有个动态数组输出的问题,请大家帮忙看看,老师要求可以

动态数组输出后跟了一串“-842150451”,是什么原因呢?
有个动态数组输出的问题,请大家帮忙看看,老师要求可以在任意位置插入或删除动态数组的值。这里还没实现任意性,只是先试试插入指定位置的值。不过最后输出的时候,在数组输出完成后跟了“-842150451”。找不到原因,请帮忙找找,先谢了!

d_vector.h部分代码:
template <typename T>
void miniVector<T>::myinsert(T a,int x)   //在向量位置为x的地方插入一个值,x从0开始。eg:x=0,则在动态数组第0个位置插入一个数,x=2,则在动态数组第2个位置插入一个数
{
T *newArr;
int i;
if(vSize==vCapacity)  //若动态数组元素个数已达到vCapacity,vCapacity+=3
    vCapacity+=3;
newArr=new T[vCapacity];
if (newArr == NULL)
throw memoryAllocationError(
"miniVector insert(): memory allocation failure");
if(x>=0 && x<vSize)    
{
for(i=0;i<x;i++)  newArr[i] = vArr[i];
newArr[x]=a;
for(i=x;i<vSize;i++)  newArr[i+1] = vArr[i];
if (vArr != NULL)delete [] vArr;
vArr=newArr;
}
else if(x==vSize)    //在数组末尾插入一个数
{
        for(i=0;i<vSize;i++)  newArr[i] = vArr[i];
newArr[x]=a;
if (vArr != NULL)delete [] vArr;
vArr=newArr;
}
else             
{
cout<<"输入的位置x不合法。";
delete [] newArr;
}
}
//--------------------------------------------------------
template <typename T>
void miniVector<T>::myrelease(int x)//删除向量位置为x处的值,x从0开始,eg:x=0,则删除动态数组第0个位置的数;x=2,删除动态数组第2个位置的数
{
T *newArr;
int i;
newArr=new T[vCapacity];//新开辟一段大小为vCapacity的内存空间
if (newArr == NULL)
throw memoryAllocationError("miniVector release(): memory allocation failure");
if(x>=0 && x<vSize-1)
{
for(i=0;i<x;i++) newArr[i]=vArr[i];
for(i=x+1;i<vSize;i++) newArr[i-1]=vArr[i];
if (vArr != NULL)delete [] vArr;
vArr = newArr;
}
else if(x==vSize-1)//要删的是动态数组最后一个元素
{
for(i=0;i<vSize-1;i++)  newArr[i]=vArr[i];
if (vArr != NULL)delete [] vArr;
    vArr = newArr;

}
else 
{
cout<<"输入的位置x不合法。";
        delete [] newArr;
}

}
//--------------------------------------------------
template <typename T>
void miniVector<T>::writeVector(const miniVector<T>& v)//输出数组元素
{
int i, n = v.size();
for(i = 0; i < n; i++)
cout << v[i] << "  ";
cout <<endl;
}
//--------------------------------------------------
minivector.cpp代码:
#include<iostream>
using namespace std;
#include "d_except.h"
#include "d_vector.h"
void main()
{
int num,value;
miniVector<int> newminivector;
cout<<"请输入动态数组元素个数:";
cin>>num;
cout<<endl;
while(num--)
{
cin>>value;
newminivector.push_back(value);
cout<<" ";
}
cout<<endl<<"删除动态数组的第3个元素\n";
newminivector.myrelease(3);
newminivector.writeVector(newminivector);

cout<<"删除动态数组的第0个元素\n";
newminivector.myrelease(0);


newminivector.writeVector(newminivector);

        cout<<"在minivector的位置2上加入元素3\n";
        newminivector.myinsert(3,2);
        newminivector.writeVector(newminivector);

        cout<<"在minivector的位置1上加入元素9\n";
newminivector.myinsert(9,1);
        newminivector.writeVector(newminivector);

}

其中一个运行结果:

请输入动态数组元素个数:7

7
 8
 9
 43
 32
 2
 4

删除动态数组的第3个元素
7  8  9  32  2  4  -842150451
删除动态数组的第0个元素
8  9  32  2  4  -842150451  -842150451
在minivector的位置2上加入元素3
8  9  3  32  2  4  -842150451
在minivector的位置1上加入元素9
8  9  9  3  32  2  4
Press any key to continue

奇怪的是main函数当中最后一个cout没有跟-842150451。 iostream insert delete
[解决办法]
有的元素没有初始化 所以是随机赋值
[解决办法]
你的miniVector<T>::size()呢
而且你添加删除元素也没有改vSize
这不是搞笑了么
无论你怎么搞,都等于7?
[解决办法]
嗯,很简单的问题,

热点排行