我如何循环遍历多维数组?假设我们有这样的事情:
class blah
{
public:
blah();
bool foo;
};
blah::blah()
{
foo = true;
}
blah testArray[1][2];
testArray[1][0].foo = false;
我如何循环浏览testArray
以查找foo
中的哪一个是假的?
答案 0 :(得分:6)
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]
}
}
}
那好吗?或者你在寻找其他东西吗?
答案 1 :(得分:5)
这个不依赖于幻数:
#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
会带来更好的缓存。
答案 2 :(得分:0)
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!
}
}
}
答案 3 :(得分:0)
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
}
}
}
答案 4 :(得分:0)
在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++;
}
}