[英]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 << "\n\n";
cout << nameVector << " Debug: | ";
for (int i = 1; i < 10; i++) {
cout << myVector[i] << " | ";
}
cout << "\n\n";
}
// String variant
void showVector(vector<string>myVector, string nameVector) {
cout << "\n\n";
cout << nameVector << " Debug: | ";
for (int i = 1; i < 10; i++) {
cout << myVector[i] << " | ";
}
cout << "\n\n";
}
// 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 ++的新手,所以如果是一個愚蠢的錯誤,請原諒我。 而且大多數代碼很復雜,因為我要遵循規則,因此例如,如果我不學習某些內容,則無法在此處使用它。 我只想知道為什么代碼不希望我將vector與for一起使用!
對於(int i = 0; i <= 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
將讀取分配空間的末尾。
但是,如果可以的話,我for
幾點評論, 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 << "\n\nDebug | ";
copy(cbegin(fibSeries), cend(fibSeries), ostream_iterator<int>(cout, " | "));
cout << "\n\n\n\nDebug | ";
for(const auto i : fibSeries) {
cout << movSeries[i] << " | ";
}
cout << endl << endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.