向量和 for 不产生结果
Vector and for doesn't produce results
我正在研究一个简单的游戏(摇滚,纸,剪刀(,当我尝试使用其他向量作为条件的元素填充向量时,我就会遇到这个问题。代码可能更容易理解:
#include "stdafx.h"
#include "../../Library/std_lib_facilities.h"
// With the fibonacci series I can generate a secret sequence of number
int fib(int n){
if (1 == n || 2 == n) {
return 1;
}
else {
return fib(n - 1) + fib(n - 2);
}
}
// It shows the list of element in a given vector
void showVector(vector<int>myVector, string nameVector) {
cout << "nn";
cout << nameVector << " Debug: | ";
for (int i = 1; i < 10; i++) {
cout << myVector[i] << " | ";
}
cout << "nn";
}
// String variant
void showVector(vector<string>myVector, string nameVector) {
cout << "nn";
cout << nameVector << " Debug: | ";
for (int i = 1; i < 10; i++) {
cout << myVector[i] << " | ";
}
cout << "nn";
}
// Generate a sequence of number in a vector
vector<int> generateCode(int input) {
vector<int>myVector;
for (int i = 1; i <= 10; i++) {
myVector.push_back(fib(i + input) % 3);
}
return myVector;
}
int main()
{
// Secret sequence of moves, based on the value (0, 1 or 2) i will show Rock, Paper or Scissor
vector<int>fibSeries;
vector<string>movSeries;
// Initialization and settings
int input = 0;
cout << "Digit an integer to start: ";
while (cin >> input) {
// Check the number to make sure is a valid one (i will implement a check later) and generate the secret code
fibSeries = generateCode(input);
// For each 0 i'll put Rock in the vector, same for 1 ( in this case paper ) and 2 ( scissor )
for (int i = 0; i <= fibSeries.size(); i++) {
if (fibSeries[i] == 0){
movSeries.push_back("Rock");
}
else if (fibSeries[i] == 1) {
movSeries.push_back("Paper");
}
else if (fibSeries[i] == 2) {
movSeries.push_back("Scissor");
}
else {
movSeries.push_back("Rock");
}
}
// Shows the vector graphically, for debug.
showVector(fibSeries, "fibisSeries");
showVector(movSeries, "movSeries");
// So for a combination of 1 - 2 - 0 - 1
// The result should be: Paper - Scissor - Rock - Paper
}
return 0;
}
执行代码后,我会得到一个(中止(。我不明白,我是C 的新手,所以如果一个愚蠢的错误,请原谅我。大多数代码都是复杂的,因为我有规则要遵循,因此,例如,如果我不研究某些东西,我将无法在这里使用它。我只想知道为什么代码不希望我将其用于向量!
for(int i = 0; i&lt; = fibseries.size((; i (
正如@yola所提到的,您比您更迭代一个元素:
如果您具有向量std::vector<char> v = {'a', 'b', 'c'};
,则可以访问元素为:
v[0] (-> 'a')
v[1] (-> 'b')
v[2] (-> 'c')
通常,您的最大索引将为length - 1
。
for (int i = 0; i <= fibSeries.size(); i++)
迭代从0到或等于 size((;也就是说,0、1、2、3(4个元素,在3个元素矢量中(。
正确的代码应为:
for (int i = 0; i < fibSeries.size(); i++)
^^^
,因此,您的问题是您应该始终使用< size
,因为索引是基于0的<= size
,将读取分配空间的末尾。
但是,如果我可以,C 11引入了基于范围的for
-Loops的新样式,这将使您无法编写条件和迭代表达式:
map<int, string> movSeries = { { 0, "Rock"s }, { 1, "Paper"s }, { 2, "Scissors"s } };
vector<int> fibSeries(10);
auto input = 0;
while(cin >> input) {
for(auto& i : fibSeries) {
i = fib(input++) % 3;
}
cout << "nnDebug | ";
copy(cbegin(fibSeries), cend(fibSeries), ostream_iterator<int>(cout, " | "));
cout << "nnnnDebug | ";
for(const auto i : fibSeries) {
cout << movSeries[i] << " | ";
}
cout << endl << endl;
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 在更改for循环的第三部分后,未使用for循环结果
- 有没有办法将 for 循环结果返回到像三元运算符这样的函数中?
- 如何在 for 循环中显示一个结果
- 如何增加"for loop"呈现的结果?
- 在 for 循环中仅显示序列的最后一个结果
- 向量和 for 不产生结果
- C++ 3 for 循环中,结果不应重复
- 如何在 for 循环中取下第一个结果,使其不会重复
- python 和 c++ 的结果对于嵌套的 for 语句是不同的
- 在与 OpenMP 并行的嵌套 for 循环中写入共享数组(通过指针)如何产生错误的结果
- 使用For循环显示1个结果
- 将结果保存到 for 循环 C++ 中的文件中
- 不同的结果取决于 for 循环的循环索引在C++中的位置
- 升压计时器在循环中的结果相同"for"?
- 为什么 for(int i=0; i<10; ++i) 和 for(int i=0; i<10; i++) 返回相同的结果?
- c++ for循环使用一个数组和多个数组输出不同的结果
- for循环中的奇怪行为改变了结果
- for循环-我有困难理解的结果从一行代码在c++的傻瓜书
- 在每次迭代后添加for循环的结果