问题:
差异之间的区别是什么:
vector<string>
和vector<char *>
?如何将数据类型的值string
传递给一个特别接受的函数:
const char *
?对于实例:
vector<string> args(argv, argv + argc);
vector<string>::iterator i;
void foo (const char *); //*i
vector<char *>
:我必须复制数据以及指针感谢您的投入!
答案 0 :(得分:17)
这实际上与矢量没有任何关系。
char*
是一个指针,可能指向也可能不指向有效的字符串数据。
std::string
是一个字符串类,它封装了构成字符串的所有必需数据,以及分配和释放功能。
如果您将std::string
存储在向量中或其他任何位置,那么所有内容都将正常工作。
如果存储了char指针,则必须完成分配和释放内存的所有艰苦工作,并确保指针只指向有意义的字符串数据,并确定字符串的长度等等。
由于许多C API以及C ++标准库的一部分都需要char*
,因此string
类具有c_str()
函数,该函数返回char*
1}}。
答案 1 :(得分:3)
要将string
传递给期待const char *
的内容,请使用string
的{{1}}成员,该成员返回以空字符结尾的字符串:
c_str()
答案 2 :(得分:3)
char*
实际上是指向类型char
的值的指针,它定义了该值可以做什么和不可以做什么。您可以使int* number
和number
引用指向存储此值的内存块的指针,并假设它是int
并将为该内存块锁定该类型。但是你可以在该内存块中存储char
'C'
,但它会抛出一个编译错误,因为它说你无法在int
上执行那些char
函数。
答案 3 :(得分:1)
foo(i->c_str());
答案 4 :(得分:1)
来自http://www.cplusplus.com/reference/string/string/:
String对象是一种特殊类型 容器,专门设计用于 使用字符序列进行操作。
与传统的c-strings不同 仅仅是一系列的人物序列 内存数组,C ++字符串对象 属于一个内置很多的类 使用字符串操作的功能 更直观的方式和一些 共同的其他有用功能 C ++容器。
char*
是一个指向角色的指针,仅此而已。
您可以使用c_str()
传递const char*
所需的数据。
对于复制,如果你复制数据,你将有一个新的字符串位置,因此是一个新的指针。
答案 5 :(得分:1)
我会使用vector< string >
,只是因为发现是基于价值的而不是基于地址的。但是,vector< char* >
会更快,因此每个都有其好处。
答案 6 :(得分:0)
vector<char *>
听起来不错!除非你的程序在内存有限的系统中运行。