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

问题描述:

我有一个字符串类型的变量数组。喜欢的东西:在C++中复制字符串数组

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。

感谢

没有,复杂对象的数组,你需要一个循环,或者你可以用与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或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; 
+0

我敢肯定的std ::阵列在TR1。至少,Visual Studio包含在tr1中。 – 2011-03-11 11:53:36

+0

@dauphic:作为'std :: tr1 :: array',是的。虽然精确的命名空间因实现而异。 – 2011-03-11 11:55:20

您可以使用std::copy(最算法)的指针和数组容易衰变为指针,所以你可以做这样的事情,以避免展开自己的循环(确保尺寸是正确的):

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

在问题的第二部分,我不完全明白你想要做什么。无论是否为范围的本地数组,如果它是本地的范围,你不能在范围外使用它,如果你需要它在函数范围,只需在那里声明它。

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

http://*.com/questions/4679059/stdvector-hex-values/4679107#4679107可能重复:P – 2011-03-11 12:00:08

+0

@Tomalak:然后投票结束它:D – Nawaz 2011-03-11 12:04:44

+0

无法遵守,尝试除以零 – 2011-03-11 12:13:07