C++ C++;为下一次迭代保留索引?

C++ C++;为下一次迭代保留索引?,c++,C++,我有一个循环,我想在其中为下一次迭代保留值。我决定使用std::vector(虽然我不知道这是否是最好的方法),但当我检查if(bottomMap[I]==true)时,它不会编译 vector<bool> bottomMap; for (int i = 0; i < str.size() ; i++){ if (str[i] != ' ') { cout << "XXXX"; } else { if (bott

我有一个循环,我想在其中为下一次迭代保留值。我决定使用
std::vector
(虽然我不知道这是否是最好的方法),但当我检查
if(bottomMap[I]==true)
时,它不会编译

vector<bool> bottomMap;
for (int i = 0; i < str.size() ; i++){
    if (str[i] != ' ') {
        cout << "XXXX";
    } else {
           if (bottomMap[i] == true)
            cout << "YYYY";
        else
            cout << "X";
        }
    }
    vector <bool> bottomMap(topMap);
}
矢量地图;
对于(int i=0;icout因为在你使用
bottommap的地方,它不知道它的定义。你必须在使用它之前定义它。

在循环开始之前,bottommap必须存在

for (int i = 0; i < str.size() ; i++){
    if (str[i] != ' ') {
        cout << "XXXX";
    } else {
           if (bottomMap[i] == true) //< ERROR: bootomMap here is not declred.
            cout << "YYYY";
        else
            cout << "X";
        }
    }
    vector <bool> bottomMap(topMap); //< Declared here, but destroyed to the very next '}'
}
for(int i=0;icout
bottomMap
在其声明之前使用。编译器怎么说?我也在循环之前声明它。在使用它之前必须定义变量,这显然不是这里的情况。此外,由于您希望在迭代之间保留值,您应该在foor循环体外部定义向量-在本例中为outide是循环本身。实际上,它是编译的,但不会打印任何内容:(我在loop之前声明了它。我发布的代码部分中也没有定义topMap向量,bottomMap在循环之前也定义得很好,但不幸的是,这并没有改变我的问题。我犯了一个错误,实际上它编译了,但当我添加该条件时它没有打印任何内容,如果(bottomMap[I]=true)至少,我学到了一些关于代码样式的知识。谢谢你,EmiliotopMap向量也没有在我发布的代码部分中定义:是的,我假设它在以前的某个地方,但是…bottomMap在循环之前也定义得很好:如果是这样的话,以后就不能重新定义它了(除非它在另一个外部作用域中,但新的作用域将隐藏上一个作用域)。无论之前是否声明,这都是不一致的。我们无法说明程序运行的分支,因为我们不知道变量携带的值。
vector <bool> bottomMap(topMap);   //< MOVED HERE
for (int i = 0; i < str.size() ; i++){
    if (str[i] != ' ') {
        cout << "XXXX";
    } else {
           if (bottomMap[i] == true)
            cout << "YYYY";
        else
            cout << "X";
        }
    }
                                  ///< AND NOMORE HERE
}
for (int i = 0; i < str.size() ; i++)
{
    if (str[i] != ' ')  
    {
        cout << "XXXX";
    } 
    else 
    {
        if (bottomMap[i] == true) //< ERROR: bottomMap here is not declared.
            cout << "YYYY";
        else
            cout << "X";
    }
}
vector <bool> bottomMap(topMap); //< Declared here, but too late!
} //< ERROR: TOO CLOSED BRACES