Форум программистов, компьютерный форум CyberForum.ru

Слияние двух векторов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.91
celestia
0 / 0 / 0
Регистрация: 07.05.2012
Сообщений: 5
18.05.2012, 10:16     Слияние двух векторов #1
Дано два одномерных массива A[i] и B[i]. Помогите, пожалуйста с кодом: нужно соединить их в один массив C[i].
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
18.05.2012, 10:33     Слияние двух векторов #2
А как "соединить"? Один за другим пойдет? Тогда так:

C++
1
2
3
4
5
6
7
8
9
int C[...]; // Место для объединенного массива
 
int i,j;
   
   j=0;
 
   for (i=0; i < n1; i++) { C[i]=A[i]; j++};
 
   for (i=0; i < n2; i++) { C[j]=B[i]; j++};
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
18.05.2012, 10:37     Слияние двух векторов #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstring>
#include <ctime>
 
 
int main() {
   const std::size_t size1 = 10,
                     size2 = 20,
                     size3 = size1 + size2;
 
   int A[ size1 ] = { 0 },
       B[ size2 ] = { 0 },
       C[ size3 ] = { 0 };
 
   std::srand( std::time( 0 ));
 
   std::cout << "First randomized array: " << std::endl;
   for ( std::size_t i = 0; i < size1; i++ ) {
      A[ i ] = std::rand() % 100;
      
      std::cout << std::setw( 2 ) << A[ i ] << ' ';
   }
   
   std::cout << "\n\nSecond randomized array: " << std::endl;
   for ( std::size_t i = 0; i < size2; i++ ) {
      B[ i ] = std::rand() % 100;
   
      std::cout << std::setw( 2 ) << B[ i ] << ' ';
   }
   
   std::cout << "\n\nMerged arrays: " << std::endl;
   for ( std::size_t i = 0; i < size3; i++ ) {
      C[ i ] = ( i < size1 ? A[ i ] : B[ i - size1 ] );
   
      std::cout << std::setw( 2 ) << C[ i ] << ' ';
   }
 
   return 0;
}
Петррр
 Аватар для Петррр
5916 / 3353 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
18.05.2012, 10:45     Слияние двух векторов #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <ctime>
#include <cstring>
 
int main(int argc, char* argv[])
{
    enum { asize = 7, bsize = 6, csize = asize + bsize };
    int a[asize];
    int b[bsize];
    int c[csize];
    srand(time(NULL));
    std::cout << "A: " << std::endl;
    for(int i = 0; i < asize; i++)
        std::cout << (a[i] = rand() % 20) << " ";
    std::cout << std::endl << "B:" << std::endl;
    for(int i = 0; i < bsize; i++)
        std::cout << (b[i] = rand() % 20) << " ";
    std::cout << std::endl << "C: " << std::endl;
    memcpy(c, a, sizeof(a));
    memcpy(c + asize, b, sizeof(b));
    for(int i = 0; i < csize; i++)
        std::cout << c[i] << " ";
    std::cout << std::endl;
    system("pause");
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.05.2012, 12:08     Слияние двух векторов #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <random>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdlib>
 
void print_vec(const std::vector<int>& vec)
{
   std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
   std::cout << std::endl;
}
 
std::vector<int> generate_vec(std::mt19937& gen, std::uniform_int_distribution<>& distr, const size_t size)
{
   std::vector<int> vec(size);
   std::generate(vec.begin(), vec.end(), [&gen, &distr]() { return distr(gen); });
   print_vec(vec);
   return vec;
}
 
int main()
{
   const int arr1_sz = 10, arr2_sz = 5;
   const int begin_range = 0, end_range = 100;
   std::mt19937 generator(time(0));
   std::uniform_int_distribution<> distr(begin_range, end_range);
   std::vector<int> vec1 = generate_vec(generator, distr, arr1_sz);
   std::vector<int> vec2 = generate_vec(generator, distr, arr2_sz);
   std::vector<int> result = vec1;
   std::copy(vec2.begin(), vec2.end(), std::back_inserter(result));
   print_vec(result);
   return 0;
}
http://liveworkspace.org/code/57e66d...9fcedd21e42541
Yandex
Объявления
18.05.2012, 12:08     Слияние двух векторов
Ответ Создать тему
Опции темы

Текущее время: 03:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru