C++ 如何在没有STL的情况下从2d阵列中删除任何未填充的插槽?

C++ 如何在没有STL的情况下从2d阵列中删除任何未填充的插槽?,c++,arrays,traveling-salesman,C++,Arrays,Traveling Salesman,这是在我的计算机基础课上分配给我的旅行销售计划。课堂上的一条规则是,除了我们的教授告诉我们的每个单独作业外,不允许以任何方式使用STL。在这种情况下,我们可以使用字符串 我目前的问题是创建动态数量的城市/路线。我的计划是创建一个13乘13的数组,然后删除所有未使用的元素。在java中,这没什么大不了的,但是C++中我发现很难解决。(不使用向量)< /P> 有没有办法(不使用STL中的矢量/任何内容)从阵列中删除任何未填充的插槽?换句话说,减小阵列的大小,直到它到达已占用的第一个插槽 另一个解决方

这是在我的计算机基础课上分配给我的旅行销售计划。课堂上的一条规则是,除了我们的教授告诉我们的每个单独作业外,不允许以任何方式使用STL。在这种情况下,我们可以使用字符串

我目前的问题是创建动态数量的城市/路线。我的计划是创建一个13乘13的数组,然后删除所有未使用的元素。在java中,这没什么大不了的,但是C++中我发现很难解决。(不使用向量)< /P> 有没有办法(不使用STL中的矢量/任何内容)从阵列中删除任何未填充的插槽?换句话说,减小阵列的大小,直到它到达已占用的第一个插槽

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

例如:

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

for (int i = 0; i < 12; i++){
  matrix [i][i] = 4;
}
int矩阵[13][13]={};
对于(int i=0;i<12;i++){
矩阵[i][i]=4;
}
这就给我留下了[12][13]和[13][13]等插槽。。清空如何删除任何空插槽

你能吗

是的,通过使用

你应该吗

不,除非你真的知道自己在做什么


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


如何拥有动态数量的城市/路线

标记阵列中的空插槽(或将其保留为空),以便在处理步骤中忽略它们

例如:

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

for (int i = 0; i < 12; i++){
  matrix [i][i] = 4;
}
假设您希望找到矩阵中所有元素的和,但忽略所有等于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;
}
#包括
int main(){
int矩阵[13][13]={0};
对于(int i=0;i<12;i++){
矩阵[i][i]=4;
}
//我们要求所有元素的和
//除了“空地块”(=4)
整数和=0;
对于(int i=0;i<13;++i)
对于(int j=0;j<13;++j)
如果(矩阵[i][j]!=4)//忽略空插槽!!
和+=矩阵[i][j];

std::你不能调整数组的大小,这是事实。我脑子里想的是,你可以迭代原始数组以查看它的结束位置,根据该大小(或向量)创建一个新的动态数组,将上一个数组填充/复制到新数组,然后继续到下一个数组,检查、创建、填充/复制、继续,等等,然后确定“未填充的插槽”我不允许使用STL来做任何编程任务。我的教授说使用STL就像让别人替你做这项工作。他说我们需要真正理解C和C++是如何工作的。blah@ClaytonBrant如果您试图理解算法并重新实现标准库,那么您就理解了它当然,这是有效的,但是如果你教C++,跳过那个简单的图书馆,那就好像教C++而不让任何人使用<代码> LBC<代码>。希望这在专业环境中不被鼓励,因为重写核心库的人通常做的工作很糟糕。版本。我同意使用vector会很好,但我不允许在STL中使用字符串以外的任何内容来完成此作业。@ClaytonBrant作业中有什么问题吗?发布它。也许你明白了rounded@FirstStep这是用邻接矩阵来解决旅行推销员的问题。@Claytonbran不确定,我更新了我的answer、 如果你有任何问题,请让我知道。投票人能告诉我我的答案有什么问题吗?:)