gpt4 book ai didi

c++ - 如何在没有 STL 的情况下从二维数组中删除任何未填充的插槽?

转载 作者:行者123 更新时间:2023-11-30 03:43:05 26 4
gpt4 key购买 nike

这是在我的计算基础类(class)中分配给我的旅行销售计划。类规则之一是不允许以任何方式使用 STL,除非我们的教授告诉我们每个单独的作业。在这种情况下,我们可以使用字符串。

我当前的问题是创建动态数量的城市/路线。我的计划是创建一个 13 x 13 的数组,然后删除所有未使用的元素。在 Java 中这没什么大不了的,但在 C++ 中我发现它很难解决。(不使用 vector )

有没有办法(不使用 vector/STL 中的任何东西)从数组中删除任何未填充的槽?换句话说,减小数组的大小,直到它到达第一个已被占用的槽位?

另一种解决方案是创建一个动态大小的数组,但 google 和 cplusplus.com 告诉我如果不使用 vector 就无法做到这一点。

例子:

int matrix [13][13] = {};

for (int i = 0; i < 12; i++){
matrix [i][i] = 4;
}

那会给我留下插槽 [12][13] 和 [13][13] 等……空的我如何删除任何空的插槽?

最佳答案

Can you?

是的,通过使用 realloc() .

Should you?

不,除非如果您真的知道自己在做什么


有很多理由不做您想做的事。您正在使用 ,因此 std::vector应该改用。此外,realloc() 可能需要复制您正在创建的所有新数组(但这只是为了增加数组的大小)。


how to have a dynamic amount of cities/routes?

标记数组的空槽(或简单地将它们留空),以便在处理步骤中忽略它们。

例子:

假设你想找到矩阵所有元素的总和,但忽略所有等于 4 的元素。那么你可以这样做:

#include <iostream>

int main() {
int matrix[13][13] = {0};
for (int i = 0; i < 12; i++) {
matrix[i][i] = 4;
}
// we want to sum all the elements
// except the "emptyslots" (= 4)
int sum = 0;
for(int i = 0; i < 13; ++i)
for(int j = 0; j < 13; ++j)
if(matrix[i][j] != 4) // ignore empty slots!!
sum += matrix[i][j];
std::cout << sum << std::endl;
return 0;
}

输出:

gsamaras@gsamaras:~$ g++ -Wall px.cpp 
gsamaras@gsamaras:~$ ./a.out
0 <-- as expected, since we initialized the matrix to 0

另一种解决方案是使用 simple linked list并删除空槽。

关于c++ - 如何在没有 STL 的情况下从二维数组中删除任何未填充的插槽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36345681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com