【问题标题】:copying arrays of strings in C++在 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 声明为全局变量。

谢谢

【问题讨论】:

    标签: c++ arrays string


    【解决方案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::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;
    

    【讨论】:

    • 我很确定 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!
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-16
      • 2015-03-23
      • 1970-01-01
      • 2012-08-15
      • 2016-01-05
      • 2012-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多