2012-10-09 74 views
14

有一种方法采取两个int阵列在C++C++连接两个INT阵列成一个较大的阵列

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

,然后将它们组合成一个包含两个阵列的值较大的阵列?

回答

27
int * result = new int[size1 + size2]; 
copy(arr1, arr1 + size1, result); 
copy(arr2, arr2 + size2, result + size1); 

只是建议,vector会做的更好一个动态数组而不是指针

+0

是'result'是一个'std :: vector'类型? – LAL

8

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

如果使用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()); 
+0

在这里你写了第一个results.insert语句,为什么你将插入的位置设置为results.end()?也许我误解了这个函数是如何工作的 – imkendal

+1

@kjh'results.end()',用stl,最初就是开始,但是当你追加时,它只是将值推到矢量的“结尾”。 –

4

另一种替代方法是使用表达式模板并假装两个连接在一起(懒惰评估)。一些链接(你可以做更多的谷歌搜索):

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; 
} 
0
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”大小

0

给定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]<<", "; 
} 

} 
1

下面是各项─

#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; 
} 

希望它可以帮助解决。