从给定向量<string>创建幂集,错误:&#34;向量下标超出范围&#34;

时间:2017-06-27 21:48:25

标签: c++ vector

我尝试了以下算法来查找给定向量的幂集

std::vector<std::string> *NFAStates 
std::vector<std::string> *PowerSet
int state_lines = (*NFAStates).size()   
for (int i = 1; i < pow(2, state_lines); i++)
{


    for (int j = 0; j < state_lines; j++)
    {


        if (i &(1 << j) && !(*PowerSet)[i].empty())
        {

            (*PowerSet)[i].append("_");
            (*PowerSet)[i].append((*NFAStates)[j]);

        }
        else if (i &(1 << j) && (*PowerSet)[i].empty())
            (*PowerSet).push_back((*NFAStates)[j]);
    }
    std::cout << (*PowerSet)[i] << std::endl;
}
return 0;

我收到错误&#34;矢量下标超出范围&#34;

这里* NFAStates由

组成
S0
S1
S2

和* PowerSet是我的powerset元素存储的地方

如果我知道为什么会收到此错误,那将非常有用

1 个答案:

答案 0 :(得分:0)

我已经用最少的mod测试了你的代码,即我改变了对引用的指针。我发现没有错。

问题出在其他地方,可能是在输入向量的初始化中。

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);

该程序值得注意的是,当PowerSet最初为空时会出现错误。

在循环之前添加#include <string> #include <vector> int func(std::vector<std::string>& NFAStates, std::vector<std::string> &PowerSet) { int state_lines = NFAStates.size(); //for (int i = 1; i < pow(2, state_lines); i++) for (int i = 1; i < (1 << state_lines); i++) // this is more effective for powers of 2 { for (int j = 0; j < state_lines; j++) { if (i &(1 << j) && !PowerSet[i].empty()) // <-- can't access [i] if PowerSet is empty. { PowerSet[i].append("_"); PowerSet[i].append(NFAStates[j]); } else if (i &(1 << j) && PowerSet[i].empty()) PowerSet.push_back(NFAStates[j]); } std::cout << PowerSet[i] << std::endl; // <-- can't access [i] if PowerSet is empty. } return 0; } int main() { std::vector<std::string> NFAStates{ "S0", "S1", "S2" }; std::vector<std::string> PowerSet{"0", "1", "2", "3", "4", "5", "6", "7" }; return func(NFAStates, PowerSet); } 可能会解决您的问题吗?