【问题标题】:C++ concatenate two int arrays into one larger arrayC++ 将两个 int 数组连接成一个更大的数组
【发布时间】:2012-09-29 06:24:24
【问题描述】:

有没有办法在 C++ 中获取两个 int 数组

int * arr1;
int * arr2;
//pretend that in the lines below, we fill these two arrays with different
//int values

然后将它们组合成一个更大的数组,包含两个数组的值?

【问题讨论】:

    标签: c++ arrays int concatenation


    【解决方案1】:
    int * result = new int[size1 + size2];
    std::copy(arr1, arr1 + size1, result);
    std::copy(arr2, arr2 + size2, result + size1);
    

    只是建议,vector 作为动态数组而不是指针会做得更好

    【讨论】:

    • resultstd::vector 类型?
    • 也许能解释一下这个copy函数是什么?
    • 我同意@juanchopanza,但如果 texasbruce 没有反应,我会说它的'std::copy
    • 由于最佳答案没有描述std::copy 的作用,这里是documentation 的链接
    【解决方案2】:

    如果您使用数组,则需要分配一个足够大的新数组来存储所有值,然后将值复制到数组中。这需要知道数组大小等。

    如果您使用std::vector 而不是数组(还有其他好处),这会变得更简单:

    std::vector<int> results;
    results.reserve(arr1.size() + arr2.size());
    results.insert(results.end(), arr1.begin(), arr1.end());
    results.insert(results.end(), arr2.begin(), arr2.end());
    

    【讨论】:

    • 这里写了第一个results.insert语句,为什么要设置插入位置为results.end()?也许我误解了这个功能是如何工作的
    • @kjh results.end(),带有 stl,最初是开始,但是当你追加时,它只是将值推到向量的“结束”。
    【解决方案3】:

    另一种选择是使用表达式模板并假装两者是连接的(惰性求值)。一些链接(你可以做额外的谷歌搜索):

    http://www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/ http://www.altdevblogaday.com/2012/01/23/abusing-c-with-expression-templates/ http://aszt.inf.elte.hu/~gsd/halado_cpp/ch06s06.html

    如果您正在寻找易用性,请尝试:

    #include <iostream>
    #include <string>
    
    int main()
    {
      int arr1[] = {1, 2, 3};
      int arr2[] = {3, 4, 6};
    
      std::basic_string<int> s1(arr1, 3);
      std::basic_string<int> s2(arr2, 3);
    
      std::basic_string<int> concat(s1 + s2);
    
      for (std::basic_string<int>::const_iterator i(concat.begin());
        i != concat.end();
        ++i)
      {
        std::cout << *i << " ";
      }
    
      std::cout << std::endl;
    
      return 0;
    }
    

    【讨论】:

      【解决方案4】:

      这是相同的解决方案-

      #include<iostream>
      #include<bits/stdc++.h>
      using namespace std;
      void Concatenate(char *s1,char *s2)
      {
          char s[200];
          int len1=strlen(s1);
          int len2=strlen(s2);
          int j;
          ///Define k to store the values on Kth address Kstart from 0 to len1+len2;
          int k=0;
      
              for(j=0;j<len1;j++)
              {
                  s[k]=s1[j];
                  k++;
      
              }
              for(j=0;j<len2;j++)
              {
                  s[k]=s2[j];
                  k++;
              }
              ///To place a null at the last of the concatenated string to prevent Printing Garbage value;
              s[k]='\n';
      
          cout<<s;
      }
      
      int main()
      {
          char s1[100];
          char s2[100];
          cin.getline(s1,100);
          cin.getline(s2,100);
          Concatenate(s1,s2);
      
          return 0;
      }
      

      希望对你有帮助。

      【讨论】:

        【解决方案5】:
        for (int i = 0; i< arraySize * 2; i++)
        {
            if (i < aSize)
            {
                *(array3 + i) = *(array1 + i);
            }
            else if (i >= arraySize)
            {
                *(array3 + i) = *(array2 + (i - arraySize));
            }
        
        }
        

        这可能会对您有所帮助,它不需要向量。我在编程课上遇到了类似的问题。我希望这会有所帮助,我需要使用指针算术。这假设 array1 和 array2 被动态初始化为大小“aSize”

        【讨论】:

          【解决方案6】:

          给定 int * arr1 和 int * arr2,这个程序在 int * arr3 中连接两个数组的元素。不幸的是,在 C++ 中,您需要知道要复制的每个数组的大小。但这并不妨碍您选择要从 arr1 复制多少元素以及从 arr2 复制多少元素。

          #include <iostream>
          using namespace std;
          
          int main(){
          int temp[] = {1,2,3,4};
          int temp2[] = {33,55,22};
          int * arr1, * arr2, *arr3;
          int size1(4), size2(3); //size1 and size2 is how many elements you 
          //want to copy from the first and second array. In our case all.
          //arr1 = new int[size1]; // optional
          //arr2 = new int[size2];
          
          arr1=temp;
          arr2=temp2;
          
          arr3 = new int; 
          //or if you know the size: arr3 = new int[size1+size2];
          
          for(int i=0; i<size1+size2; i++){
              if (i<size1)
                  arr3[i]=arr1[i];
              else
                  arr3[i] = arr2[i-size1];
          }
          cout<<endl;
          for (int i=0; i<size1+size2; i++) {
              cout<<arr3[i]<<", ";
          }
          
          }
          

          【讨论】:

            猜你喜欢
            • 2021-09-20
            • 2023-02-09
            • 2014-09-16
            • 1970-01-01
            • 2011-06-19
            • 2021-11-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-19
            相关资源
            最近更新 更多