在 C++ 中复制字符串数组

Posted

技术标签:

【中文标题】在 C++ 中复制字符串数组【英文标题】:copying arrays of strings in C++ 【发布时间】:2011-03-11 11:33:53 【问题描述】:

我有一个字符串类型的变量数组。比如:

std::string Array1[3] = "A","B","C"; 

我想把这个数组的内容复制到另一个数组中:

std::string Array2[3]; 

目前我使用循环来执行此操作。有没有 更简单/替代的方式?另外,如果我声明并初始化变量 如下:

if( ... check some condition ... ) 

    .
    .
    std::string Array1[3] = "A","B","C"; 
  

一旦离开 if 语句的范围,它显然会被销毁。有没有 一种避免这种情况的方法,以便稍后在函数中使用它。理想情况下,我想避免将变量 Array1 声明为全局变量。

谢谢

【问题讨论】:

【参考方案1】:

不,对于复杂对象的数组,您需要一个循环,或者您可以使用 std::copy 包装循环:

std::string Array1[3] =  "A", "B", "C" ;
std::string Array2[3];
std::copy(Array1, Array1 + 3, Array2);

但是,我建议使用更规范的std::vector,它具有本地分配(有关填充std::vector 的方法,请参阅this SO 答案):

std::vector<std::string> Array1, Array2;
Array1.push_back("A"); Array1.push_back("B"); Array1.push_back("C");
Array2 = Array1;

或者,至少,boost::arraystd::array,如果你在 C++0x 上,std::tr1:array 或类似的支持 TR1 的工具链,比如最近的 MSVS),这是一个静态分配的等价物也可以赋值:

using boost::array; // swap as appropriate
array<std::string, 3> Array1 =  "A", "B", "C" ; // yes, I used two
array<std::string, 3> Array2 = Array1;

【讨论】:

我很确定 std::array 在 tr1 中。 Visual Studio 至少将它包含在 tr1 中。 @dauphic:就像std::tr1::array,是的。尽管精确的命名空间因实现而异。【参考方案2】:

您可以将std::copy(和大多数算法)与指针一起使用,并且数组很容易衰减为指针,因此您可以执行以下操作来避免展开您自己的循环(确保大小正确):

std::string src[3] =  "A", "B", "C" ;
std::string dst[3];
std::copy( src, src + 3, dst );

关于问题的第二部分,我不太了解您想要做什么。数组是否在范围内,如果它在范围内,则不能在该范围之外使用它,如果在函数范围内需要它,只需在此处声明即可。

【讨论】:

【参考方案3】:

也尝试使用std::vector

std::string strs[3] = "A","B","C";  //from your code!

std::vector<std::string> strvector(strs, strs+3); //improvement!

或者,

std::vector<std::string> strvector; //declare 

//later on!
std::copy(strs, strs+3, std::back_inserter(strvector)); //improvement!

【讨论】:

***.com/questions/4679059/stdvector-hex-values/… 的可能副本:P 无法遵守,试图除以零

以上是关于在 C++ 中复制字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将数字字符串拆分为数组? [复制]

在C++中,如何把字节数组转换成字符串

C++ 将 std::string 复制到没有空终止的 char 数组

如何将C++中string类型的字符串赋给unsigned char数组

复制无符号字符数组

二维字符数组到一维字符串数组