在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::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::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!
http://stackoverflow.com/questions/4679059/stdvector-hex-values/4679107#4679107可能重复:P – 2011-03-11 12:00:08
@Tomalak:然后投票结束它:D – Nawaz 2011-03-11 12:04:44
无法遵守,尝试除以零 – 2011-03-11 12:13:07
我敢肯定的std ::阵列在TR1。至少,Visual Studio包含在tr1中。 – 2011-03-11 11:53:36
@dauphic:作为'std :: tr1 :: array',是的。虽然精确的命名空间因实现而异。 – 2011-03-11 11:55:20