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

Изменение размера массива - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Матрица. Поменять местами элементы главной диагонали максимальными элементами ряда. http://www.cyberforum.ru/cpp-beginners/thread105960.html
Матрица. Поменять местами элементы главной диагонали максимальными элементами ряда. Матр, заполняеться рандомом, заранее спасибо! //матрица прямоугольная.
C++ образовать новый массив Дан массив, состоящий из n натуральных числе. Образовать новый массив, элементами которого будут элементы исходного, оканчивающиеся на цифру k. http://www.cyberforum.ru/cpp-beginners/thread105957.html
Указатели (работа со строками) C++
Примечание: Вариант задания реализовать в виде ф-ции, использующей для работы со строкой только указатели и операции вида *p++, p++ и тд. Если ф-ция возвращает строку и ее фрагмент, то это так же необходимо сделать через указатель. А теперь сами задания (помогите, плиз): 1. Ф-ция находит в строке пары одинаковых фрагментов и возвращает указатель на первый. С помощью ф-ции найти все пары...
Определить, является ли палиндромом часть строки s, начиная с i-го символа и заканчивая j-ым (рекурсия) C++
Разработать рекурсивную функцию, возвращающую значение, определяющую:является ли палиндромом часть строки s,начиная с i-го символа и заканчивая j-м... БОже...это гадость =((((((((( Добавлено через 2 минуты ах, да...на С++
C++ контейнер queue http://www.cyberforum.ru/cpp-beginners/thread105942.html
здравствуйте , хотелось бы узнать как полечить доступ к элементам контейнера queue и как вывести элементы этого контейнера) помогите плиз)
C++ Работа с текстовым файлом Дан текстовый файл, фразы в котором отделены друг от друга точками, а слова – пробелами и знаками препинания. Удалить из этого файла лишние пробелы, оставив по одному между словами. Добавлено через 21 час 32 минуты некому помочь ? :( подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
18.03.2010, 14:51     Изменение размера массива
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
42
/*
    Изменение размера массива
*/
 
int main()
{
    // Размер исходного массива 
    int const a_size = 10;
    // Выделение памяти под исходнйы массив
    int * a = new int [a_size];
    // Заполнение исходного массива случайными значениями
    for(int i = 0; i < a_size; ++i)
            a[i] = rand() % 9 + 1;
 
 
    // Вывод массива на экран
    std::cout << "array a: ";
    std::copy(a, a + a_size, std::ostream_iterator<int>(std::cout, " ")); 
    std::cout << std::endl;
 
    int b_size = 0;
    std::cout << "enter new size: ";
    std::cin >> b_size;
                    
    // Выделение памяти под новый массив и его заполнение
    int * b = new int[b_size];
    memset(b, 0, sizeof(int) * b_size);
    
    // Копирование
    std::copy(a, a + std::min(a_size, b_size), b);
    
    // Освобождение памяти из под исходного массива
    delete[] a;
 
    // Вывод нового массива
    std::cout << "array b: ";
    std::copy(b, b + b_size, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    // Память освобождать надо всегда!
    delete [] b;
}
Добавлено через 12 минут
Еще можно поиздеваться и написать подобную функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
// Изменение размера массива
int * Resize(int * a, int oldSize, int newSize)
{
    int * t = new int[newSize];
    memset(t, 0, sizeof(int) * newSize);
    
    std::copy(a, a + std::min(oldSize, newSize), t);
    
    delete[] a;
 
    return t;
}
Пользуяюсь ею следующим образом
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
    // Размер исходного массива 
    int a_size = 10;
    // Выделение памяти под исходнйы массив
    int * a = new int [a_size];
    // Заполнение исходного массива случайными значениями
    for(int i = 0; i < a_size; ++i)
        a[i] = rand() % 9 + 1;
 
    // Вывод массива на экран
    std::cout << "array a: ";
    std::copy(a, a + a_size, std::ostream_iterator<int>(std::cout, " ")); 
    std::cout << std::endl;
 
    int b_size = 0;
    std::cout << "enter new size : ";
    std:: cin >> b_size;
    
    a = Resize(a, a_size, b_size);
    a_size = b_size;
    
    // Вывод массива на экран
    std::cout << "array a: ";
    std::copy(a, a + a_size, std::ostream_iterator<int>(std::cout, " ")); 
    std::cout << std::endl;
Добавлено через 1 минуту
Цитата Сообщение от rangerx Посмотреть сообщение
использовать std::vector.
Но этот вариант конечно самый благоразумный
 
Текущее время: 12:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru