vector <string>或vector <char * =“”>?</char> </string>

时间:2009-02-15 00:15:03

标签: c++ string visual-studio-2008 pointers char

问题:

  • 差异之间的区别是什么:

    • vector<string>vector<char *>
  • 如何将数据类型的值string传递给一个特别接受的函数:

    • const char *

对于实例

 vector<string> args(argv, argv + argc);

 vector<string>::iterator i;

 void foo (const char *); //*i
  • 我理解使用vector<char *>:我必须复制数据以及指针

编辑:

感谢您的投入!

7 个答案:

答案 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* numbernumber引用指向存储此值的内存块的指针,并假设它是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 *>听起来不错!除非你的程序在内存有限的系统中运行。