6

如何将 C char** 转换为 C++ 向量?是否有一些内置功能可以用来执行此操作,或者通过一系列迭代步骤来完成它更好?

编辑:由于各种原因,C 数组中的元素数量是未知的。有可能我可以将它作为另一个参数传递,但这绝对有必要吗?

4

4 回答 4

18

您可以简单地使用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

于 2013-03-29T18:53:38.260 回答
8
char** c;
vector<string> v(c, c + 10);

将从给定范围的元素构造元素。10 是这里的元素数

于 2013-03-29T18:52:22.407 回答
1

您可以使用带有两个迭代器的构造函数,即std::vector范围构造函数

char* strings[] = {"aaa", "bbb", "ccc", "ddd"};
std::vector<std::string> v(strings, strings + 4);

4你的数组的大小在哪里。在这个具体示例中,strings也可以使用sizeofoperator来计算数组的大小:

int len = sizeof(strings)/sizeof(char*);
std::vector<std::string> v2(strings, strings + len);

但是,纯数组的大小是不可能的,char**因为不能以任何方式直接从指针中检索数组的大小(也值得阅读有关数组衰减的内容)。

于 2013-03-29T19:29:31.280 回答
0

这个单行代码对于捕获命令行参数很有用......

int
main(int argc, char ** argv)
{
  std::vector<std::string> arguments(argv, argv + argc);
}
于 2013-03-29T19:03:52.793 回答