如何将C char **转换为C ++向量?是否有一些内置功能可以用来做到这一点,还是通过一系列迭代步骤来实现它更好?
编辑:由于各种原因,C数组中的元素数量未知。我有可能将其作为另一个参数传递,但这是绝对必要的吗?
答案 0 :(得分:17)
您可以简单地使用带有两个迭代器的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
。
答案 1 :(得分:8)
char** c;
vector<string> v(c, c + 10);
将从给定范围的元素构造元素。 10是这里的元素数量
答案 2 :(得分:1)
你可以使用带有两个迭代器的constructor of std::vector
,a.k.a。 范围构造函数 :
char* strings[] = {"aaa", "bbb", "ccc", "ddd"};
std::vector<std::string> v(strings, strings + 4);
其中4
是数组的大小。在这个具体示例中,使用sizeof
operator也可以计算strings
数组的大小:
int len = sizeof(strings)/sizeof(char*);
std::vector<std::string> v2(strings, strings + len);
这对于纯char**
是不可能的,因为无法以任何方式直接从指针中检索数组的大小(也值得阅读关于array decaying的内容)。
答案 3 :(得分:0)
这个单行程序对捕获命令行参数非常有用......
int
main(int argc, char ** argv)
{
std::vector<std::string> arguments(argv, argv + argc);
}