- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是在我的计算基础类(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?
不,除非如果您真的知道自己在做什么。
有很多理由不做您想做的事。您正在使用 c++ ,因此 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/
我是一名优秀的程序员,十分优秀!