用C ++复制字符串数组

时间:2011-03-11 11:33:54

标签: c++ arrays string

我有一个string类型的变量数组。类似的东西:

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

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

std::string Array2[3]; 

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

if( ... check some condition ... ) 
{
    .
    .
    std::string Array1[3] = {"A","B","C"}; 
}  

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

谢谢

3 个答案:

答案 0 :(得分:5)

不,对于一系列复杂对象,您需要一个循环,或者您可以使用std::copy包裹循环:

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

但是,我建议使用更具规范性的std::vector,其中包含原生作业(请参阅this SO答案以了解填充std::vector的方法):

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或类似于最近的MSVS等具有TR1功能的工具链,这是静态分配的等价物,也可以分配:

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

答案 1 :(得分:2)

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

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

关于问题的第二部分,我不太了解你想做什么。数组是否是作用域的本地数组,如果它是作用域的本地数组,则不能在该作用域之外使用它,如果在函数作用域需要它,只需在那里声明它。

答案 2 :(得分:0)

也尝试使用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!