1 Отредактировано brainail (2009-08-19 17:01:50)

Тема: Азы С++

У меня вопрос :
Что значит вот этот тип

typedef complex<double> base;

то есть он и комплексный и дробный,объясните пожалуйста в чём прелесть типа комплех,и так далее...

и ещё

base wlen (cos(ang), sin(ang));

то есть переменная типа

typedef complex<double> base;

и в неё в скобках два числа,что это значит ? хотя вот тут уже

base w (1);

а вот тут

base u = a[i+j],

расскажите ...?

2

Re: Азы С++

brainail пишет:

У меня вопрос :
Что значит вот этот тип

typedef complex<double> base;

то есть он и комплексный и дробный,объясните пожалуйста в чём прелесть типа комплех,и так далее...

Это значит, что он представляет комплексное число x+yi, где i=sqrt(-1) - мнимая единица, а x,y - пара действительных чисел. В complex<double> эти действительные числа представляются типом double. А еще можно быть, например, complex<float> и complex<long double>.

У complex<T> есть два конструктура:
complex(T x, T y) - создаёт число x+yi
complex(T x) - создаёт число x+0i, т.е. чисто действительное число.

Конструкции вида "base w = 1"  и "base w(1)" в С++ эквивалентны - они обе означают, что требуется вызвать конструктор класса base, принимающий один аргумент, и причем с типом аргумента, совместимым с тем значением, что ему передают.

3

Re: Азы С++

Да и причём здесь "умножение двух длинных чисел"?

Ваш вопрос по азам C++.

4

Re: Азы С++

Просто это было в задаче о длинных числах,сглупил smile
Спасибо ! Теперь всё понятно .

5

Re: Азы С++

У меня вопрос не в тему, но тоже по азам C++:

сегодня обнаружил(точнее прочитал), что stack и queue, а возможно и что-то еще, можно создавать не просто stack<int> и queue<int>, а например stack<int,vector<int> > или queue<int,list<int> >.

Кто-нибудь может мне объяснить отличие этих определений от обыкновенных и зачем это надо?

6

Re: Азы С++

ну как бы понятно
stack<int>
создаёт Стэк целых чисел,где в каждой ячейке хранится число и всё
stack<int,vector<int> >
создаёт стек
где в каждой ячейке хранится свой вектор и число
то есть когда допустим нужно хранить не просто числа,а именно список каких-то чисел
вот и всё
так же и со всеми другими описаниями....
map< string,string >
map< string,bool >
map< string,set< pair< string,bool > > >
map< string,set< string > >
....

7

Re: Азы С++

Это значит - тип контейнера, который используется стеком для хранения элементов.

8

Re: Азы С++

Ок, что это такое понятно; интересней то, нужно ли это на практике? Ведь по сути мы обрубаем некоторую часть функциональности этого underlying контейнера(не знаю как по русски), почему бы тогда не просто его использовать. Или в случае скажем stack<int,vector<int> > d можно обратиться к d[3]?

9

Re: Азы С++

Непонятен вопрос, скорректируйте пожалуйста своё сообщение более точнее. P.S. БоТ big_smile

10

Re: Азы С++

Или в случае скажем stack<int,vector<int> > d можно обратиться к d[3]?

Нет, нельзя (без низкоуровневых хаков). Этот запрет называется "инкапсуляцией".

2rf пишет:

Ок, что это такое понятно; интересней то, нужно ли это на практике? Ведь по сути мы обрубаем некоторую часть функциональности этого underlying контейнера(не знаю как по русски), почему бы тогда не просто его использовать.

Лично мне не приходилось на разу за всю ACM-ерскую практику указывать нестандартный underlying контейнер в STL'евских классах. А stack<T> я вообще ни разу не использовал. vector<T> это то же самое, но еще и позволяет делать random access.

Но, рискну предложить одно применение - допустим нам надо положить в стек так много элементов, что о?н? ?п?р?о?с?т?о? ?л?о?п?н?е?т они не поместятся в оперативной памяти. Тогда можно было бы написать свой хитрый контейнер, реализующий интерфейс "Back Insertion Sequence", который бы лишние элементы держал не в памяти, а складывал на диск. Ну а так как stack<T> (в отличие от vector<T>) требует доступа лишь к хвосту последовательности, а не к произвольному месту, то это бы, видимо, сильно упростило нам задачу создания такого контейнера.

11

Re: Азы С++

Почему использовать stack, а не vector, казалось бы, понятно. Если нам нужна функциональность именно стека, то логично использовать ту структуру данных, которая предоставляет именно интерфейс стека. Это улучшает читаемость кода (как в понимании назначения структур, так и в смысле названия методов), и это обобщает реализацию, делаёт её менее зависимой от underlying (извиняюсь, не знаю как это хорошо сказать по-русски smile ) структуры данных.