在 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::array
(std::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++ 将 std::string 复制到没有空终止的 char 数组