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

Стрoкa элeмeнтов любого типа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Квадрат и точки! http://www.cyberforum.ru/cpp-beginners/thread346274.html
Здравствуйте!! Нужна помощь!! Какое наибольшее количество точек с целочисельными координатами можно на листке клеточку накрыть квадратом со стороной N клеток? Входные данные Единственное число - сторона квадрата N (1 <= N <= 10000).
C++ GNU С++ Скачал книжку "C++ для чайников" т.к. я в этом не "бум-бум" в этой книге написано что нужно использовать GNU C++ но я так и не смог её найти и хотел спросить Где можно её скачать или можно ли пробывать все премеры в этой кинге в программе Microsoft Visual Studio 2010 http://www.cyberforum.ru/cpp-beginners/thread346256.html
помогите разобраться с gcc C++
начал изучать c++. не могу скомпилировать первую программу. Вот что я делал. 1.запускаю файл gcc.exe. Создаю папку с адресом C:\gcc. В ней оказывается ряд папок (bin, docs, examples, include, lib) 2. печатаю программу : int main() { int a=2. b=3. c: c= a+
C++ Драйвер Фильтр
Здрастье! В Windows Driver Kit есть исходники и описания для драйверов фильтров (как их писать на С)! Но я не могу найти там ничего толкого, может кто знает где найти описание драйверов фильтров (как их писать)? Желательно источник Windows Driver Kit!
C++ Произведение нечётных чисел от 1 до 15 http://www.cyberforum.ru/cpp-beginners/thread346210.html
Напишите программу, которая считает и печатает произведение нечетных целых от 1 до 15. Что то вообще уже мозг не работает, подскажите пожалуйста алгоритм, псевдокод в цикле for с условием (i=1;i<=15;i+=2) Это я понял, а вот как считать и выводить
C++ Вычисление факториалов целых чисел от 1 до 5 Написал программу int main() { int factorial = 1; int count = 0; while(count >= 5 ) { count++; factorial *=count; cout << factorial; подробнее

Показать сообщение отдельно
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
31.08.2011, 01:59     Стрoкa элeмeнтов любого типа
Цитата Сообщение от Mee Посмотреть сообщение
подскажите как можзно сделать аргумент по умолчанию подходящий для любого типа
Шаблоны.

Я представляю себе это как-то так:

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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
#include <iostream>
#include <string>
#include <stdlib.h>
#include <stdio.h>
 
using namespace std;
 
template <typename T>
class CStr
{
protected:
    T * bufPtr;
    size_t bufSize;
 
public:
    CStr( )
    {
        bufSize = 0;
        bufPtr = 0;
    }
 
    CStr( T * src )
    {
        bufSize = 0;
        bufPtr = 0;
 
        *this = src;
    }
 
    CStr( CStr& src )
    {
        bufSize = 0;
        bufPtr = 0;
 
        *this = src;
    }
 
    ~CStr()
    {
        if( bufPtr )
           free( bufPtr );
    }
 
    size_t size( T * str )
    {
        size_t i = 0;
 
        while( str[i] != 0 )
           i++;
 
        return i;
    }
 
    size_t size( )
    {
        return bufSize;
    }
 
    void clear()
    {
        if( !bufPtr )
           return;
 
        bufPtr = (T*)realloc( bufPtr, 0 );
        bufSize = 0;
    }
 
    CStr & operator=( CStr& str )
    {
        bufPtr = (T*)realloc( bufPtr, str.size() + 1 );
        bufSize = str.size();
 
        for( size_t i = 0; i < str.size(); i++ )
           bufPtr[i] = str[i];
 
        bufPtr[ bufSize ] = 0;
 
        return *this;
    }
 
    CStr & operator=( T * str )
    {
        size_t lng = size(str);
 
        bufPtr = (T*)realloc( bufPtr, lng + 1 );
        bufSize = lng;
 
        for( size_t i = 0; i < lng; i++ )
           bufPtr[i] = str[i];
 
        bufPtr[ lng ] = 0;
 
        return *this;
    }
 
    CStr & operator=( T c )
    {
        bufPtr = (T*)realloc( bufPtr, 2 );
        bufSize = 1;
 
        *bufPtr = c;
        bufPtr[ 1 ] = 0;
 
        return *this;
    }
 
    T& operator[] ( size_t pos )
    {
        return bufPtr[pos];
    }
 
    CStr& operator+= ( CStr& str )
    {
        size_t lng = bufSize + str.size();
 
        bufPtr = (T*)realloc( bufPtr, lng + 1 );
 
        for( size_t i = 0; i < str.size(); i++ )
           bufPtr[ i + bufSize ] = str[i];
 
        bufPtr[lng] = 0;
        bufSize = lng;
 
        return *this;
    }
 
    CStr& operator+= ( T * str )
    {
        size_t str_lng = size( str );
        size_t lng = bufSize + str_lng;
 
        bufPtr = (T*)realloc( bufPtr, lng + 1 );
 
        for( size_t i = 0; i < str_lng; i++ )
           bufPtr[ i + bufSize ] = str[i];
 
        bufPtr[lng] = 0;
        bufSize = lng;
 
        return *this;
    }
 
    CStr& operator+= ( T c )
    {
        bufSize++;
        bufPtr = (T*)realloc( bufPtr, bufSize + 1 );
 
        bufPtr[bufSize - 1] = c;
        bufPtr[bufSize] = 0;
 
        return *this;
    }
 
    const T * data()
    {
        return bufPtr;
    }
};
 
template <typename T>
ostream & operator<< ( ostream &os, CStr<T> & str )
{
    for( size_t i = 0; i < str.size(); i++ )
       os << str[i];
 
    return os;
}
 
int main()
{
    CStr<char> str( "hello" );
    CStr<char> str2( "goodbye" );
 
    cout << "Initial:\n" << str << '\n' << str2 << '\n';
    cout << "str += \" mayday\": " << (str += " mayday") << '\n';
    cout << "str += str2: " << (str += str2) << '\n';
    cout << "str = str2: " << (str = str2) << '\n';
    str.clear();
    cout << "str.clear(): " << str << '\n';
 
    return 0;
}
При выводе тут всё упирается в умение std::ostream работать с элементом заданного типа. Можно так же прикрутить istream & operator>>( istream &is, CStr<T> &str );, но я затрудняюсь прочитать элементы типа T из is, итераторы (было бы интересно узнать, как их делать)... Однако, всё это уже есть в basic_stream.
 
Текущее время: 15:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru