2013-10-03 43 views
-2

我是新来的C++,但有半年的Java se/ee7工作经验。C++矢量多值

我想知道如何把3个值到vector<string> 例如:vector<string, string, string>或只是vector<string, string> 避免3个载体的使用。

vector<string> questions; 
vector<string> answers; 
vector<string> right_answer; 

questions.push_back("Who is the manufacturer of Mustang?"); 
answers.push_back("1. Porche\n2. Ford \n3. Toyota"); 
right_answer.push_back("2"); 

questions.push_back("Who is the manufacturer of Corvette?"); 
answers.push_back("1. Porche\n2. Ford \n3. Toyota \n4. Chevrolette"); 
right_answer.push_back("4"); 


for (int i = 0; i < questions.size(); i++) { 
    println(questions[i]); 
    println(answers[i]); 

    if (readInput() == right_answer[i]) { 
     println("Good Answer."); 
    } else { 
     println("You lost. Do you want to retry? y/n"); 
     if(readInput() == "n"){ 
      break; 
     }else{ 
      i--; 
     } 
    } 
} 

如果可能,我想使用类似questions[i][0] questions[i][1] questions[i][3]的东西。

+4

C++与Java非常不一样。不要陷入思考的陷阱中,事情是相似的。 –

回答

4

为什么没有像结构:

struct question_data { 
    std::string question; 
    std::string answers; // this should probably be a vector<string> 
    std::string correct_answer; 
}; 

然后:

std::vector<question_data> questions; 
... 
for (int i = 0; i < questions.size(); i++) { // I would personally use iterator 
    println(questions[i].question); 
    println(questions[i].answers); 

    if (readInput() == questions[i].correct_answer) ... 
} 
+0

Thankyou,我今天开始用C++,我从来没有听说过struct,所以我会用这个 –

+0

好运与你的C++努力。它很复杂,但奇怪的是奖励:)'struct'就像'class',不同之处在于默认情况下成员是'public',所以在这个例子中少写一行:)。随意使用类,而不是结构 –

+0

你明白我的权利,它完美的作品。再次感谢你。 –

8

你可以拥有它的struct和存储对象在vector

struct question 
{ 
    std::string title; 
    std::string choices; 
    std::string answer; 
}; 

// ... 

question q = {"This is a question", "Choice a\nChoice b", "Choice a"}; 
std::vector<question> questions; 
questions.push_back(q); 

然后你可以使用questions[0].titlequestions[0].answer

+0

+1有更好的命名,那么我的例子:) –

+0

谢谢你,似乎作为第二个答案,效果很好。谢谢 –

0

你可以做你想在现代C++中做的事情。

您可以使用像一个元组:

std::vector<std::tuple<std::string, std::string>> vec; 
std::tuple<std::string, std::string> some_tuple; 
some_tuple = std::make_tuple("some", "strings"); 
vec.push_back(some_tuple); 

您可以使用std ::领带日后读取。