C++中如何确定固定大小数组的已填充终止索引
确定C++固定大小数组的填充终止索引
因为C++原生数组没有内置元数据记录实际填充的元素数量,只能根据填充时的约定来判断,以下是几种可行的方案:
基于哨兵值判断
如果填充前数组被初始化过,且未填充的位置有一个不会出现在填充数据里的哨兵值(比如整数数组用-1、0,字符串数组用空字符串""),可以遍历数组找到第一个哨兵值的位置,其前一个索引就是填充的终止索引。示例代码:
// 假设数组填充了5个int元素,未填充位置默认初始化为0,且填充的元素都不为0 int arr[10] = {12, 34, 56, 78, 90}; int last_idx = -1; for (int i = 0; i < 10; ++i) { if (arr[i] == 0) { // 匹配哨兵值 break; } last_idx = i; } // 此时last_idx的值为4,即填充的最后一个元素的索引基于指针类型的空值判断
如果数组存储的是指针类型(比如std::string*或自定义类指针),未填充的位置默认是nullptr,可以遍历找到第一个nullptr的位置,前一个索引就是终止索引。示例代码:
std::string* arr[10] = {new std::string("a"), new std::string("b"), new std::string("c")}; int last_idx = -1; for (int i = 0; i < 10; ++i) { if (arr[i] == nullptr) { break; } last_idx = i; } // 此时last_idx的值为2注意事项
如果数组填充前没有初始化,未填充的位置是随机的垃圾值,这种情况下无法准确判断终止索引——因为垃圾值可能和填充的元素重复,导致遍历误判。所以在填充数组前,一定要确保未填充区域有明确的标记值。
内容的提问来源于stack exchange,提问作者Aditya Dubey
相关产品推荐
相关产品推荐

