2011-01-20 4 views
0

Я пытаюсь преобразовать программу в ООП. Программа работает с несколькими массивами:Инициализация массивов на конструкторах

int tipoBilletes[9] = { 500,300,200,100,50,20,10,1,2 }; 
int cantBilletes[9] = {0}; 

Так что для моего обращения, я объявлен в заголовочном файле это:

int *tipoBilletes; 
int *cantBilletes; 

и в конструкторе я написал

tipoBilletes = new int[9]; 
cantBilletes = new int[9]; 

tipoBilletes[0] = 500; 
tipoBilletes[1] = 300; 
tipoBilletes[2] = 200; 
... 

Он работает хорошо.

Мой вопрос в том, есть ли способ инициализировать его, как в Java?

int[] tipoBilletes = new int[]{ 500,300 }; 

а не устанавливать каждый элемент один за другим?

+2

Не до выхода новой версии C++. Но вы должны использовать 'std :: vector', а не' new [] '. Кроме того, какие выгоды вы получаете, изменяя его из массива фиксированного размера в динамический массив? – GManNickG

+0

I * still * не может понять, как невозможно иметь что-то столь же простое, как простой локальный массив объектов без конструктора по умолчанию в старом C++ ... Имейте это, как, забыл об этом при создании C++ 03, или что? – Kos

+0

Ну, я использовал динамический массив, потому что я думал, что могу сделать инициализацию java - вроде –

ответ

4

Нет, но вы не обязаны записывать каждое задание самостоятельно. Другой вариант:

const int TIPO_BILLETES_COUNT = 9; 
const int initialData[TIPO_BILLETES_COUNT] = { 500,200,300,100,50,20,10,1,2 }; 
std::copy(initialData, initialData + TIPO_BILLETES_COUNT, tipoBilletes); 

(Обратите внимание, что вы должны почти наверняка с помощью std::vector для этого вместо ручного динамического распределения инициализации не отличается с std::vector, хотя, как только вы resize вляет.).

+0

На самом деле, для опции 'std :: vector' вы можете инициализировать вектор, используя его конструктор, который принимает пару итераторов вместо' std :: copy'. –

+0

@Fred: Да, вы тоже можете это сделать! –

2

Если вы используете зЬй :: вектор можно использовать boost::assign:

#include <vector> 
#include <boost/assign/std/vector.hpp> 
//... 
using namespace boost::assign; 
std::vector<int> tipoBilletes; 
tipoBilletes += 500, 300, 200, 100, 50, 20, 10, 1, 2; 

с другой стороны, следует рассмотреть возможность использования массива фиксированного размера, если это небольшой и постоянный размер.

Смежные вопросы