我需要调用下面的 getList 函数,该函数来自我无法更改的库。
#include <iostream>
#include <vector>
#include <string>
//function already exists in a separate library, can't be changed
void getList(const char* list[], int count){};
int main()
{
std::vector<std::string> vectorOfStrings = {"123" , "abc", "def", "456"};
//call getList and pass vectorOfStrings and vectorOfStrings.size()
getList(/*convert std::vector<std::string> to const char** */, vectorOfStrings.size());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我已经在这里问过类似的问题并得到了答案,但我认为可能有一种 C++ 方法可以做到这一点。
使用 astd::vector<const char*>来存储原始 中存储的字符串数据的指针std::vector<std::string>。
这是一个快速操作,因为您正在复制原始数据,但请注意:这要求传递const char*给函数的数据不存储在任何地方,因为一旦原始字符串被释放,它们就会变得无效(您将得到未定义的行为)。
std::vector<std::string> strings = { "foo", "bar", "baz" };
std::vector<const char*> cstrings;
cstrings.reserve(strings.size());
std::transform(
strings.begin(),
strings.end(),
std::back_inserter(cstrings),
[] (const auto& string) { return string.c_str();}
);
getList(cstrings.data(), cstrings.size());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |