循环遍历多维数组?

发布于 2024-12-15 05:39:00 字数 270 浏览 0 评论 0原文

我将如何循环遍历多维数组?假设我们有这样的事情:

class blah
{
    public:
    blah();
    bool foo;
};

blah::blah()
{
    foo = true;
}

blah testArray[1][2];
testArray[1][0].foo = false;

我如何循环遍历 testArray 来查找 foo 中哪一个是 false?

How would I loop through a multidimensional array? Say we had something like this:

class blah
{
    public:
    blah();
    bool foo;
};

blah::blah()
{
    foo = true;
}

blah testArray[1][2];
testArray[1][0].foo = false;

How would I go about looping through testArray to find which one of foo is false?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

跨年 2024-12-22 05:39:00

这并不依赖于幻数:

#include <cstddef>
for (size_t x = 0; x < sizeof(*testArray) / sizeof(**testArray); ++x)
for (size_t y = 0; y < sizeof(testArray)  / sizeof(*testArray);  ++y) {
  if (testArray[x][y].foo == false) {

  }
}

在外循环中使用 x 可以带来更好的缓存。

This one isn't dependent on magic numbers:

#include <cstddef>
for (size_t x = 0; x < sizeof(*testArray) / sizeof(**testArray); ++x)
for (size_t y = 0; y < sizeof(testArray)  / sizeof(*testArray);  ++y) {
  if (testArray[x][y].foo == false) {

  }
}

Having x in the outer loop leads to better caching.

半暖夏伤 2024-12-22 05:39:00
class blah
{
    public:
    blah();
    bool foo;
};

blah::blah()
{
    foo = true;
}

int testArrayFirstLength = 1;
int testArraySecondLength = 2;

blah testArray[testArrayFirstLength][testArraySecondLength];
testArray[1][0].foo = false;


for (int i = 0; i < testArrayFirstLength; i++) {
    for (int j = 0; j < testArraySecondLength; j++) {
        if (!testArray[i][j]) {
            blah thing = testArray[i][j]
        }
    }
}

那好?或者您在寻找其他东西吗?

class blah
{
    public:
    blah();
    bool foo;
};

blah::blah()
{
    foo = true;
}

int testArrayFirstLength = 1;
int testArraySecondLength = 2;

blah testArray[testArrayFirstLength][testArraySecondLength];
testArray[1][0].foo = false;


for (int i = 0; i < testArrayFirstLength; i++) {
    for (int j = 0; j < testArraySecondLength; j++) {
        if (!testArray[i][j]) {
            blah thing = testArray[i][j]
        }
    }
}

That good? Or were you looking for something else?

喜爱纠缠 2024-12-22 05:39:00
int x = 0;
int y = 0;

for( x = 0; x < 1; x++ ){
    for( y = 0; y < 2; y++ ){
       if( testArray[x][y].foo == false ){
           //yeah!
       }
    }
}
int x = 0;
int y = 0;

for( x = 0; x < 1; x++ ){
    for( y = 0; y < 2; y++ ){
       if( testArray[x][y].foo == false ){
           //yeah!
       }
    }
}
过期以后 2024-12-22 05:39:00
for (std::size_t i(0); i != 1; ++i){
    for (std::size_t j(0); j != 2; ++j) {
        if (!testArray[i][j].foo) {
            //testArray[i][j].foo is false
            //Perform the required operation
        }
    }
}
for (std::size_t i(0); i != 1; ++i){
    for (std::size_t j(0); j != 2; ++j) {
        if (!testArray[i][j].foo) {
            //testArray[i][j].foo is false
            //Perform the required operation
        }
    }
}
淡墨 2024-12-22 05:39:00

在 c++ +14 中测试(使用指针,所以要安全)

#include <iostream>
int main()
{
int array[2][2][2]; 
int* pointer=&array[0][0][0]; 
for(int i=0; i<2*2*2; i++)
    {
        std::cout<<*pointer<<std::endl;     
        pointer++; 
    }
}

Tested in c++ +14 (using pointers, so be safe)

#include <iostream>
int main()
{
int array[2][2][2]; 
int* pointer=&array[0][0][0]; 
for(int i=0; i<2*2*2; i++)
    {
        std::cout<<*pointer<<std::endl;     
        pointer++; 
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文