为什么我不能使用下面的代码? 我知道矩阵的定义就像一维数组一样。
我怎样才能成功?
我需要的只是优化。
MyStructure* myStructure[8][8];
int i = 0;
for(MyStructure* s = myStructure[0][0]; i<64; i++,s++)
{
}
答案 0 :(得分:1)
由于使用指向对象的指针来演示这一点很困难,因此我用普通整数代替指向MyStructure的指针。间接层次没有变化,而且间接层面对OP的问题很重要。
顺便说一句,不要这样做。使用Ediac的解决方案。我只想指出OP的问题出在哪里。在一维 MAY 中浏览2D数组。它可能不会。有趣的调试!这只是起作用,因为它很容易将2D数组实现为一维数组,但据我所知,这种行为并不能保证。使用矢量或其他传统动态阵列解决方案肯定无法保证。如果我错了,请把我打倒。
#include <iostream>
using namespace std;
//begin function @ Seraph: Agreed. Lol.
int main()
{
// ordering the array backwards to make the problem stand out better.
// also made the array smaller for an easier demo
int myStructure[4][4] = {{16,15,14,13},{12,11,10,9},{8,7,6,5}, {4,3,2,1}};
int i = 0;
// here we take the contents of the first element of the array
for (int s = myStructure[0][0]; i < 16; i++, s++)
{ //watch what happens as we increment it.
cout << s << " ";
}
cout << endl;
// output: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
// this didn't iterate through anything. It incremented a copy of the first value
// reset and try again
i = 0;
// this time we take an extra level of indirection
for (int * s = &myStructure[0][0]; i < 16; i++, s++)
{
// and output the value pointed at
cout << *s << " ";
}
cout << endl;
// output: 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
// now we have the desired behaviour.
} //end function end Lol
输出:
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
答案 1 :(得分:1)
如果你想要一个循环,你可以这样做:
MyStructure* myStructure[8][8];
for(int i = 0; i<64; i++)
{
MyStructure* s = myStructure[i/8][i%8];
}
您将迭代矩阵的每个元素。但是,时间复杂度仍为O(行*列)。