关于向量还有其他事情要知道吗

时间:2019-01-31 08:34:55

标签: c++

我最近做了一个简短的程序,该程序是关于我在网上学到的有关编程(我是新手)C ++的新课程,每次学习新概念时,我都会这样做,深入了解它的概念及其用途。(这是我在编程中自学的方式)。我在程序中使用了vector,它解决了我的问题。但是,它创建了一个新的。

(您可能已经看过此代码)

#include <iostream>
#include <string>
#include <windows.h>
#include <vector>

using namespace std;

int main()
{
    string LetterInput, LetterLoad, input;
    string Words[5] = {"fire","eggs","roll","camera","lotion"};
    vector <string> PossibleAnswers;
    int Number,a = 0;
    int Size,Num;

    cout << "Lets play HANGMAN! " << endl;
    Sleep(500);

    cout << "Think of a word and type in the number" << endl;
    cout << "of letters there are" << endl;
    cin >> Size;

    for (int i = 0; i <= Size; i++){
        LetterLoad += "_";
    }

    Num = sizeof(Words)/sizeof(string);

    for (int i = 0; i <= Num ; i++){
        if ((unsigned)Size == Words[i].size()){
            PossibleAnswers.push_back(Words[i]);
        }
    }


    for (int i = 0;i <= Num;i++){
        cout << PossibleAnswers[i] << endl;
    }

    cout << "Okay lets start" << endl;
    Sleep(750);

    while(a == 0)
   {

    cout << PossibleAnswers[0] << endl;
    cout << PossibleAnswers[1] << endl;

    cout << LetterLoad << endl;

    cout << "Type in the position of the letter you want to guess" << endl;
    cin >> Number;

    cout << "What letter do you want to put?" << endl;
    cin >> LetterInput;

    LetterLoad[Number-1] = LetterInput[0];

   for (size_t i = 0; i <= PossibleAnswers.size(); i++){
    for (int n = 0; n <= Size; n++){
        if (LetterInput[n] == PossibleAnswers[i][n]){
            cout << "Got one" << endl;
        }
    }
   }

   }
    return 0;

}

该程序能够输入正确的单词。但是,它将在到达cout << "Okay lets start" << endl;并随后到达该代码行以下的所有内容时停止工作。我听说向量需要其他人的“内存分配”。这与程序无法正常运行有关吗?以及如何解决?

2 个答案:

答案 0 :(得分:2)

如果在任何情况下都没有满足条件if ((unsigned)Size == Words[i].size()){,那么您将不会推回足够的字符串。发生这种情况时,您将在下面的for (int i = 0;i <= Num;i++){循环中崩溃,因为您尝试访问的元素更多。我建议改为这样做:

for (std::string &s : PossibleAnswers){
    std::cout << s << std::endl;
}

您也可以从0PossibleAnswers.size()进行循环,就像您在下面进行的进一步操作一样。

  

我听说向量需要其他的“内存分配”   人。

不,您必须误解了一些东西。这只是一个超出范围的错误,我建议通过始终使用range based for loops循环矢量或从0vec.size()循环来避免这些错误。

答案 1 :(得分:0)

您在问有关以下问题:我正在尝试写一篇文章,但实际上您不知道字母。以我作为老师的经验,最好先学习编程基础知识,而不是学习使用库编程。您的以下陈述证明了我的观点:

  

我听说向量需要其他人的“内存分配”。

了解不同类型的存储块。这对每个程序员都是必要的。

std::string
std::vector

这些是线性数据结构-如果您不能自己实现它们,请不要使用它们。

while (a==0) ...

您正在为变量分配4个字节(在当今的大多数体系结构中),您甚至没有使用它。大多数编译器会将代码更改为:

while (true) ...

因为它等效于它。

每次有人写一个神奇的数字-世界上的一只小猫都死了。不要使用神奇的数字,省掉一只小猫。即使在培训课程中。您有时间将描述写入控制台,但没有为字符串数组的大小创建const变量。

有动力去学习编程是件好事。但是,如果您发现错误,将不会有任何好的结果。我的建议是更改您正在学习的来源。