a_zhai 2015-05-01 03:11 采纳率: 66.7%
浏览 3711
已采纳

vector使用显示越界是什么原因

#include
#include

using namespace std;

void merge( vector& a, int first, int mid, int last )
{
vector s1;
for (auto si = a.begin() + first; si <= a.begin() + mid; ++si)
s1.push_back( *si );
vector s2;
for (auto si = a.begin() + mid + 1; si <= a.begin() + last; ++si)
s2.push_back( *si );
int i = 0; int j = 0; int k = 0;
int len1 = mid - first + 1;
int len2 = last - mid;
for (; ( i < len1 ) && ( j < len2 ); ++k)
{
if (s1[ i ] < s2[ j ])
a[ k ] = s1[ i++ ];
else
a[ k ] = s2[ j++ ];

}
while (i++ < len1)//调试到这里显示越界,但是此时i = 0,len1 = 1,怎么也想不通为什么会越界
    a[ k++ ] = s1[ i ];
while (j++ < len2)
    a[ k++ ] = s2[ j ];

}

void mergesort( vector& a, int first, int last )
{
if (first < last)
{
int mid = ( first + last ) / 2;
mergesort( a, first, mid );
mergesort( a, mid + 1, last );
merge( a, first, mid, last );
}
}

int main()
{
vector a = { 44, 3, 38, 5, 47, 25, 36, 26, 27, 2, 46, 4, 5, 50,99 };

mergesort( a, 0, a.size()-1 );

for (auto i : a)
    cout << i<<"  ";
cout << endl;

return 0;

}

  • 写回答

1条回答 默认 最新

  • devmiao 2015-05-01 03:13
    关注

    i++
    ->
    ++i
    否则下面i=1了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键
  • ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
  • ¥15 NX MCD仿真与博途通讯不了啥情况
  • ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题