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

Динамическая структура данных(контейнер) типа "Вектор" - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Проверьте пожалуйста код на правильность ! http://www.cyberforum.ru/cpp-beginners/thread683962.html
2. Даны два вектора и найти угол между ними и модуль векторного произведения векторов X и Y. При вычислении использовать формулу:c=abs(x)*(y)*sin(f) , где с - векторное произведение. векторов X и Y.Так же прикрепил файл с заданием отдельно ! За ранее спасибо ! #include "stdafx.h" #include <conio.h> #include <stdio.h> #include <math.h> #include <locale.h> #include <stdlib.h> void...
C++ Создать массив из различных элементов исходного Кто чем может.Новичок ,только учусь 2. Дан целочисленный массив А, среди элементов которого есть одинаковые. Создать массив из различных элементов А. http://www.cyberforum.ru/cpp-beginners/thread683958.html
В двумерном массиве поменять местами столбцы, симметричные относительно середины массива C++
Кто чем может.Новичок ,только учусь 3.В двумерном массиве целых чисел поменять местами столбцы, симметричные относительно середины массива (верти-кальной линии).
C++ Программа с использованием дружественной функции и классов
Я в С++ новичок. Нужна программа с использованием дружественной функции и классов. Можете привести пожалуйста пару примеров? Заранее огромное Вам спасибо.
C++ Вывести на экран изображение летящей ракеты http://www.cyberforum.ru/cpp-beginners/thread683955.html
Кто чем может.Новичок ,только учусь 4. Написать программу, выводящую на экран изображение летящей ракеты. Фоном может быть изображение неба, поверхности земли, облаков.
C++ Данная целочисленная прямоугольная матрица. Определить количество строк, не содержащих ни одного нулевого элемента. Данная целочисленная прямоугольная матрица. Определить количество строк, не содержащих ни одного нулевого элемента. подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
30.10.2012, 03:20     Динамическая структура данных(контейнер) типа "Вектор"
Вам в раздел Си, не?

> но я что то никак не могу понять как ее делать, дело в том, что в ней нельзя использовать объекты, классы, шаблоны классов, а также библиотеку STL.

Как-как, структурами, функциями и дефайнами!

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
struct vector {
    char **data;
    size_t size;
};
 
inline void INIT_VECTOR(struct vector *vec)
{
    vec->data = NULL;
    vec->size = 0;
}
 
void clean_vector(struct vector *vec)
{
    size_t i;
    for (i = 0; i < vec->size; ++i) {
        free(vec->data[i]);
    }
    free(vec->data);
    vec->data = NULL;
    vec->size = 0;
}
 
inline void delete_vector(struct vector *vec)
{
    clean_vector(vec);
    free(vec);
}
 
struct vector* create_empty_vector(void)
{
    struct vector *res = malloc(sizeof(*res));
    if (!res) {
        return NULL;
    }
    INIT_VECTOR(res);
    return res;
}
 
struct vector* create_vector(size_t size, const char *init)
{
    size_t i;
    size_t init_len;
    struct vector *res = create_empty_vector();
    if (!res) {
        return NULL;
    }
    
    res->data = malloc(size * sizeof(*res->data));
    if (!res->data) {
        return res;
    }
    init_len = strlen(init) + 1;
    for (i = 0; i < size; ++i) {
        if (!(res->data[i] = malloc(init_len))) {
            res->size = i;
            goto cleanup;
        }
        strcpy(res->data[i], init);
    }
    res->size = size;
    goto out;
cleanup:
    clean_vector(res);
out:
    return res;
}
 
int vector_set(struct vector *vec, size_t index, const char *data)
{
    char *new_el;
    
    if (index >= vec->size) return -1;
 
    new_el = realloc(vec->data[index], strlen(data) + 1);
    if (!new_el) {
        return -1;
    }
    strcpy(new_el, data);
    vec->data[index] = new_el;
    return 0;
}
 
#define vector_foreach_forward(ptr, vector)       \
    for ((ptr) = (vector)->data;                  \
         (ptr) < (vector)->data + (vector)->size; \
         ++(ptr))
 
int main(void)
{
    struct vector *vec = create_vector(5, "1");
    
    char **str;
    vector_foreach_forward(str, vec) {
        printf("%s ", *str);
    }
    printf("\n");
    
    vector_set(vec, 3, "42");
    
    vector_foreach_forward(str, vec) {
        printf("%s ", *str);
    }
    delete_vector(vec);
    return 0;
}
 
Текущее время: 11:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru