【问题标题】:c++ 3d arraysc++ 3d 数组
【发布时间】:2008-12-11 18:52:14
【问题描述】:

我正在尝试运行一个 3d 数组,但是当我运行它时代码在 windows 中崩溃了,这是我的代码;

#include <iostream>

using namespace std;

int main(){

    int myArray[10][10][10];

    for (int i = 0; i <= 9; ++i){
        for (int t = 0; t <=9; ++t){            
            for (int x = 0; x <= 9; ++t){

                myArray[i][t][x] = i+t+x; 

            }

        }

     }


    for (int i = 0; i <= 9; ++i){
        for (int t = 0; t <=9; ++t){
            for (int x = 0; x <= 9; ++t){

                cout << myArray[i][t][x] << endl;

            }

        }

    }

    system("pause");

}

谁能给我一个快速修复/解释

【问题讨论】:

    标签: c++ arrays 3d


    【解决方案1】:

    你有两次线

    for (int x = 0; x <= 9; ++t){
    

    当你的意思是

    for (int x = 0; x <= 9; ++x){
    

    经典的复制粘贴错误。

    顺便说一句,如果你在调试器中运行它并查看变量的值,很容易看出发生了什么。

    【讨论】:

    • 你同样可以通过在你的第一个嵌套循环中包含“cout
    • 它被称为“经典的复制粘贴错误”是有原因的。我们都做到了。 :-)
    【解决方案2】:

    大卫的回答是正确的。

    顺便说一句,约定是使用 i、j 和 k 作为嵌套迭代器索引,并且还使用

    如果你这样做,那么你可以使数组大小成为一个常数,并去掉一些幻数。

    此外,在您使用数组索引时的断言可能会将您指出错误。

    结果可能如下所示:

    const std::size_t ARRAY_SIZE = 10;
    
    int myArray[ARRAY_SIZE][ARRAY_SIZE][ARRAY_SIZE];
    
    for (std::size_t i = 0; i < ARRAY_SIZE; ++i) 
    {
        for (std::size_t j = 0; j < ARRAY_SIZE; ++j)
        {
            for (std::size_t k = 0; k < ARRAY_SIZE; ++k)
            {
                std::assert (i < ARRAY_SIZE && j < ARRAY_SIZE && k < ARRAY_SIZE);
                // Do stuff
            }
        }
    }
    

    【讨论】:

    • 我更喜欢为每个断言编写一个条件,以便更清楚哪个条件失败。
    • 另外,没有“std::assert”,assert 是一个宏(我希望你可以命名空间宏...)
    • 我还想说(虽然不是很重要)把 i++ 放在 ++i 上。只是看起来更整洁。恕我直言
    • 另外(有点小问题),您忘记了数组定义后的分号 :)
    • 实际上最好养成使用 ++i 的习惯,因为增量和获取比获取和增量操作成本更低,尽管编译器通常会将其优化掉。跨度>
    猜你喜欢
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2022-01-16
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多