如何将向量变量传递给函数?

时间:2011-02-04 07:42:23

标签: c++ vector arguments

我们如何将vector变量传递给函数?我有一个vector char*和一个以char *为参数的函数。如何将vector变量传递给此函数?

3 个答案:

答案 0 :(得分:3)

如果你有一个带char *参数的函数,那么你只能传递向量中的一个char *。例如:

std::vector<char*> v;
char buf[] = "hello world";
v.push_back(buf);
the_function(v[0]);

如果要在向量中的每个成员上调用该函数,只需循环:

for (std::vector<char*>::iterator i = v.begin(); i != v.end(); ++i)
    the_function(*i);

编辑:根据你下面的评论,你实际上想要编写一个接受矢量作为参数的函数...尝试:

void the_function(const std::vector<char*>& v)
{
    // can access v in here, e.g. to print...
    std::cout << "[ (" << v.size() << ") ";
    for (std::vector<char*>::iterator i = v.begin(); i != v.end(); ++i)
         std::cout << *i << ' ';
    std::cout << " ]";
}

如果您有要调用的现有函数,并且您不想更改其参数列表...

void TV_ttf_add_row(const char*, const char*, const void*);

...然后,说你知道矢量将有足够的元素:

assert(v.size() >= 3); // optional check...
TV_ttf_add_row(v[0], v[1], v[2]);

if (v.size() >= 3)
    TV_ttf_add_row(v[0], v[1], v[2]);

或者,如果你想在v中没有足够元素的情况下抛出异常,那么......

try
{
    TV_ttf_add_row(v.at(0), v.at(1), v.at(2));
}
catch (const std::exception& e)
{
    std::cerr << "caught exception: " << e.what() << '\n';
}

(try / catch块不必围绕单个函数调用 - 只要v.at( )调用位于try块内某处或直接或间接调用内部函数块)。

答案 1 :(得分:0)

您还可以使用索引访问矢量元素:

void f(char* s)
{
    // do something with s
}

std::vector<char*> char_vect;
size_t len = char_vect.size();
for (size_t i=0; i<len; ++i)
    f(char_vect[i]);

答案 2 :(得分:0)

如果需要将std :: vector的内容传递给带有C数组的函数,可以获取向量的第一个元素的地址:

void someCfunc(char *);

std::vector<char *> somevec;
// set up the vector ... then:
someCfunc(&somevec[0]);

但是 - 小心你不要把C字符串约定混在这里! std::vector不会自动将'\0'附加到字符串的末尾;你必须手动完成。如果它只是一个字节缓冲区,则需要单独传递向量的大小。如果您将数据接收回矢量,C函数无法自行扩展矢量,因此您需要事先确保矢量足够大。

另请注意,这仅适用于std::vector,而不适用于其他STL容器。