如何测试传递向量参数到函数

时间:2016-07-02 19:12:56

标签: c++

我尝试制作一个允许我为学校添加词汇卡的程序。我希望能够在不必制作矢量的情况下测试所有内容,例如,这是我的函数

AddCard("Earthquakes", {"They shake", "Everyone hates it"}, 2);

问题是我不知道如何通过向量适当地传递用于大型测试目的的参数。我想通过这样的论点:

{{1}}

但是我这样做会出错。有没有人对我如何解决这个问题有任何意见?谢谢你的帮助!!

我使用了一个向量,因为我不确定将存储多少定义(这就是为什么我有定义计数器参数)

4 个答案:

答案 0 :(得分:1)

AddCard("Earthquakes", {"They shake", "Everyone hates it"}, 2);

此调用应该工作 - 确实对 Galik 也是如此 - 只要您的编译器设置为使用C ++ 11标准或更高版本。 {braced, list}推导为std::initializer_list,其中可以用于构建vector(以及许多其他STL容器)。这可以避免您必须创建一个命名的临时vector(并重复push_ / emplace_back() s),而是直接构造您的参数。

也许你只是忘了在编译时包含正确的选项?如果您正在使用GCC a.k.a。g++,请将-std=c++11 - 或者甚至更好的-std=c++14添加到您的命令行选项中。如果您的编译器是其他的,那么请查阅其文档以了解如何使用最新和最好的标准。

另外,正如其他人所提到的,给出vector长度的第3个参数完全没有必要,因为vector维持并暴露自己的大小。这是他们的主要特征/好处之一。使用yourVector.size(),或者只需要迭代所有值而不关心多少值,范围for

答案 1 :(得分:0)

您的问题有点不清楚......我假设您在询问如何将大型数据向量传递给函数?这是一个例子:

#include <string>
#include <vector>

void AddCard(std::string vocab_word, std::vector<std::string> definitions, int definition_count) {
// do something
}

int main() {
   std::string test_string = "Hello earthquake";
   std::vector<std::string> test_vector {"They shake", "Everyone hates it"};

   AddCard(test_string, test_vector, 1); 

   // passing a vector explicitly
   AddCard(test_string, {"Still shaking", "Oh no"}, 2); 

   // add an element to the end of the vector
   test_vector.push_back("They shake again") 

   // etc ...

   return 1;
}

你并不像有人已经指出的那样需要第三个参数,你可以在向量变大时调用definitions.size(),这会返回向量的大小。

在您的文件中添加using namespace std行也是不好的做法,您应该像上面一样手动声明命名空间。

答案 2 :(得分:0)

首先,Vocab_Word的类型不一致。从您使用它的方式来看,它似乎是一个字符串,如果是这样,使它成为一个字符串。如果真的应该是一个int,那么你需要知道你需要传递什么常数来表示地震&#34;地震&#34;。我会假设它应该是一个字符串,并且相应地修复了AddCard函数。

然后我会这样做:

vector<string> definitions;
definitions.push_back("They shake");
definitions.push_back("Everyone hates it");
AddCard("Earthquakes", definitions, definitions.size());

请注意,AddCard中的第三个参数可能是不必要的,因为向量知道它有多大(由size()报告)。如果您想告诉您的函数使用给定向量的第一个n元素,则只需要它。

答案 3 :(得分:-2)

如果我是你,我会使用一串字符串而不是矢量。你可以做到

std::string defn[2];
defn[0]+="They shake";
defn[1]+="Everyone hates it"

您的函数原型将如下更改

void AddCard(std::string Vocab_Word,std::string definitions[], int definition_count)