这是我到目前为止的内容:
int main(int argc, char const *argv[])
{
srand(time(NULL));
vector<int> deck;
vector<bool> drawn;
for (int i = 0; i < 20; i++)
{
int numvalue = rand()%20;
if (drawn[numvalue - 1]) // this checks if their are duplicate values
{
i--;
continue;
}
else
{
drawn[numvalue - 1] = true;
//vector<int> deck;
deck.push_back(numvalue);
}
}
copy (deck.begin(), deck.end(), ostream_iterator<int>(cout, " "));
return 0;
}
我得到的编译器错误是:
编辑:解决了编译问题,但是现在这是段错误...
我想打印出矢量卡座中的内容,经过阅读后,我认为最好的选择是使用函数副本。有什么想法我可以解决这个问题吗?
这样在main的顶部声明甲板,因此不会被声明超出范围
int main(int argc, char const *argv[])
{
srand(time(NULL));
vector<int> deck;
vector<bool> drawn(20);
for (int i = 0; i < 20; i++)
{
int numvalue = rand()%20;
if (drawn[numvalue - 1])
{
i--;
continue;
}
else
{
drawn[numvalue - 1] = true;
deck.push_back(numvalue);
}
}
copy (deck.begin(), deck.end(), ostream_iterator<int>(cout, " "));
return 0;
}
还
int numvalue = rand()%20;
可以轻松返回0,并且如果使用if(drawn [numvalue-1]),则大约有5%的时间访问了drawd [-1]。将其更改为:
int numvalue = rand()%20 +1;
另外,正如WhozCraig在下面指出的那样,您从未初始化绘制,这将导致段错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句