c++ - C++ 数组中的 C6385 和 C6201 警告
问题描述
我在将两个排序数组合并为一个排序数组时收到一条警告消息,如下所示:并且出现的错误或警告消息是:C6385 和 C6201
#include <iostream>
using namespace std;
int main()
{
int arr1[5] = { 1,3,5,7,9 }, arr2[5] = { 0,2,4,6,8 }, arr3[10];
for (int i = 1; i <= 9; i++)
if (arr1[i] < arr2[i])
arr3[i] = arr1[i];
else
arr3[i] = arr2[i];
cout << arr3[10] << endl;
return 0;
}
解决方案
C++ 中的数组索引从 0 开始。
还有这个说法
cout << arr3[10] << endl;
不输出数组。它尝试输出数组索引为 10 的不存在元素。
并且循环无效,因为它试图访问数组 arr1 和 arr2 之外的内存。
您的程序可以如下所示。
#include <iostream>
using namespace std;
int main()
{
const size_t N = 5;
int arr1[N] = { 1,3,5,7,9 }, arr2[N] = { 0,2,4,6,8 }, arr3[2 * N];
for ( size_t i = 0, j = 0, k = 0; i < 2 * N; i++)
{
if ( arr2[k] < arr1[j])
arr3[i] = arr2[k++];
else
arr3[i] = arr1[j++];
}
for ( const auto &item : arr3 ) cout << item << ' ';
cout << '\n';
return 0;
}
std::merge
使用标头中声明的标准算法可以执行相同的任务<algorithm>
。
例如
#include <iostream>
#include <iterator>
#include <algorithm>
int main()
{
int a1[] = { 1, 3, 5, 7, 9 };
int a2[] = { 0, 2, 4, 6, 8 };
int a3[sizeof( a1 ) / sizeof( *a1 ) + sizeof( a2 ) / sizeof( *a2 )];
std::merge( std::begin( a1 ), std::end( a1 ),
std::begin( a2 ), std::end( a2 ),
std::begin( a3 ) );
for ( const auto &item : a3 ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
程序输出与上图相同。
0 1 2 3 4 5 6 7 8 9
推荐阅读
- python - _ 不显示在 Spyder 变量资源管理器中
- javascript - Typescript - 使用函数排除枚举值
- react-native - 在 FlatList 中使用 pagingEnabled 道具向下/向上滚动时进入屏幕下方。我想实现全屏垂直滑块
- amazon-web-services - 我在帐户之间执行 S3 复制,当我从目标下载时收到拒绝访问错误
- sql - 如何从一列计算任务完成
- ssh - 是否必须设置 PasswordAuthentication no 才能在 Centos7 中使用 authorized_keys
- laravel - 带参数的 Laravel 图表
- azure - TFS/Azure Devops 不忽略 .pubxml 文件
- react-native - 反应原生自定义 buildType 不使用 Metro
- javascript - 当 Fullcalendar 使用视图时,dayRender 停止工作:resourceTimelineWeek [V4.0.1]