如何将 C char** 转换为 C++ 向量?是否有一些内置功能可以用来执行此操作,或者通过一系列迭代步骤来完成它更好?
编辑:由于各种原因,C 数组中的元素数量是未知的。有可能我可以将它作为另一个参数传递,但这绝对有必要吗?
您可以简单地使用std::vector
带有两个迭代器的构造函数:
const char* arr[] = {"Hello", "Friend", "Monkey", "Face"};
std::vector<std::string> v(std::begin(arr), std::end(arr));
或者如果你真的有一个const char**
:
const char** p = arr;
std::vector<std::string> v(p, p + 4);
由于数组到指针的转换,它也可以直接使用arr
而不是使用。p
char** c;
vector<string> v(c, c + 10);
将从给定范围的元素构造元素。10 是这里的元素数
您可以使用带有两个迭代器的构造函数,即std::vector
范围构造函数:
char* strings[] = {"aaa", "bbb", "ccc", "ddd"};
std::vector<std::string> v(strings, strings + 4);
4
你的数组的大小在哪里。在这个具体示例中,strings
也可以使用sizeof
operator来计算数组的大小:
int len = sizeof(strings)/sizeof(char*);
std::vector<std::string> v2(strings, strings + len);
但是,纯数组的大小是不可能的,char**
因为不能以任何方式直接从指针中检索数组的大小(也值得阅读有关数组衰减的内容)。
这个单行代码对于捕获命令行参数很有用......
int
main(int argc, char ** argv)
{
std::vector<std::string> arguments(argv, argv + argc);
}