我们如何将vector
变量传递给函数?我有一个vector
char*
和一个以char *
为参数的函数。如何将vector
变量传递给此函数?
答案 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容器。