我有一个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。
谢谢
答案 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::array
(std::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!