<分区>
我无法理解为什么我不能在 2D 矩阵( vector 的 vector )中设置值。如果我使用 C 风格的循环或迭代器,它可以工作,但如果我使用基于 c++ 范围的循环,它就不起作用。有人可以解释为什么吗?
谢谢。
struct my_str {
int value;
my_str(int v) : value(v) {}
};
int main(int argc, char *argv[])
{
// Initialise with some dummy data (creates a 3 x 2 matrix)
vector<vector<my_str>> array2D;
for (int i=0; i<3; ++i) {
vector<my_str> tmp;
for (int j=0; j<2; ++j)
tmp.push_back( my_str(-999) );
array2D.push_back(tmp);
}
// Now try to replace the values
int ctr=0;
// Fails
for (auto array1D: array2D)
for (auto it: array1D)
it.value = (float)++ctr;
// Fails
for (auto array1D: array2D)
for (std::vector<my_str>::iterator it=array1D.begin(); it != array1D.end() ;++it)
(*it).value = (float)++ctr;
// Fails
for (int i=0; i<array2D.size(); i++)
for (auto array1D: array2D[i])
array1D.value = (float)++ctr;
// Works
for (std::vector<std::vector<my_str>>::iterator array1D=array2D.begin(); array1D != array2D.end() ;++array1D)
for (std::vector<my_str>::iterator it=array1D->begin(); it != array1D->end() ;++it)
(*it).value = (float)++ctr;
// Works
for (int i=0; i<array2D.size(); i++)
for (std::vector<my_str>::iterator it=(array2D[i]).begin(); it != (array2D[i]).end() ;++it)
it->value = (float)++ctr;
// Works
for (int i=0; i<array2D.size(); i++)
for (int j=0; j<(array2D[i]).size(); j++)
array2D[i][j].value = (float)++ctr;