我尝试制作一个允许我为学校添加词汇卡的程序。我希望能够在不必制作矢量的情况下测试所有内容,例如,这是我的函数
AddCard("Earthquakes", {"They shake", "Everyone hates it"}, 2);
问题是我不知道如何通过向量适当地传递用于大型测试目的的参数。我想通过这样的论点:
{{1}}
但是我这样做会出错。有没有人对我如何解决这个问题有任何意见?谢谢你的帮助!!
我使用了一个向量,因为我不确定将存储多少定义(这就是为什么我有定义计数器参数)
答案 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)