以下是我用C++代码写的关于插入排序法的算法。同样的代码我用数组来排序时没出错,改成vector的容器却出错。。。运行是却说内存不能为read.这是为什么?
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>ivec;
int a,t;
while(cin>>a)
ivec.push_back(a);
for(vector<int>::iterator it=ivec.begin()+1;it!=ivec.end();++it)
{
int key=*it;
for(vector<int>::iterator is=it-1;is>0,*is>key;--is)
{
t=*is;
*is=*(is-1);
*(is-1)=t;
}
}
for(vector<int>::iterator iv=ivec.begin();iv!=ivec.end();++iv)
cout<<*iv<<" ";
cout<<endl;
return 0;
}
如下代码:
主要错误是访问容器越界了,你可能是受到先做的那个数组的影响,而忽略了对容器越界的检查
for(vector<int>::iterator is=it-1;is>0,*is>key;--is)
{
t=*is;
*is=*(is-1);
*(is-1)=t;
}
错在这里。。。你应该能看出来的。。。。。
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>ivec;
int a,t;
while(cin>>a)
ivec.push_back(a);
for(vector<int>::iterator it=ivec.begin()+1;it!=ivec.end();++it)
{
int key=*it;
for(vector<int>::iterator is=it-1;is>=ivec.begin()&&*is>key;--is)
{
t=*(is+1);
*(is+1)=*is;
*is=t;
}
}
for(vector<int>::iterator iv=ivec.begin();iv!=ivec.end();++iv)
cout<<*iv<<" ";
cout<<endl;
return 0;
}
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>ivec;
int a,t;
while(cin>>a)
ivec.push_back(a);
for(vector<int>::iterator it=ivec.begin()+1;it!=ivec.end();++it)
{
int key=*it;
for(vector<int>::iterator is=it-1;is>=ivec.begin() && *is>key;--is)
{
*(is+1) = *is;
}
*(is+1) = key;
}
for(vector<int>::iterator iv=ivec.begin();iv!=ivec.end();++iv)
cout<<*iv<<" ";
cout<<endl;
return 0;
}