Почему не работает vector<int[10]>?
От: Аноним  
Дата: 22.09.04 12:40
Оценка:
Вот такой код:

std::vector<int[10]> vctr;
int item[10] = {0};
vctr.push_back( item );


Ошибка: cannot convert from "const int[10]" to "int[10]".
Почему и как с этим бороться?
vector<vector<int> > не хотелось бы..
Re: Почему не работает vector<int[10]>?
От: Shhady Россия  
Дата: 22.09.04 12:44
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Вот такой код:


А>
А>std::vector<int[10]> vctr;
А>int item[10] = {0};
А>vctr.push_back( item );
А>


А>Ошибка: cannot convert from "const int[10]" to "int[10]".

А>Почему и как с этим бороться?
А>vector<vector<int> > не хотелось бы..

    std::vector<int*> vctr;
    int item[10] = {0};
    vctr.push_back( item );

?
... << RSDN@Home 1.1.3 stable >>
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re: Почему не работает vector<int[10]>?
От: ssm Россия  
Дата: 22.09.04 12:46
Оценка:
Здравствуйте, Аноним, Вы писали:


А>vector<vector<int> > не хотелось бы..

а так:

std::vector<boost:array<int, 10> >

?
Re[2]: Почему не работает vector<int[10]>?
От: Shhady Россия  
Дата: 22.09.04 12:49
Оценка: +1
Здравствуйте, Shhady, Вы писали:

S>
S>    std::vector<int*> vctr;
S>    int item[10] = {0};
S>    vctr.push_back( item );
S>

S>?

Предугадывая тухлые помидоры: забыл, что надо хранить по значению (вроде так проблема формулировалась)
... << RSDN@Home 1.1.3 stable >>
"Man feed machine
Machine feed man"
Peter Gabriel — OVO — The Tower That Ate People
Re: Почему не работает vector<int[10]>?
От: _nn_ www.nemerleweb.com
Дата: 22.09.04 12:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот такой код:


А>
А>std::vector<int[10]> vctr;
А>int item[10] = {0};
А>vctr.push_back( item );
А>


А>Ошибка: cannot convert from "const int[10]" to "int[10]".

А>Почему и как с этим бороться?
А>vector<vector<int> > не хотелось бы..

Пользуйтесь boost::array

std::vector<boost::array<int,10> > vctr;
boost::array<int,10> item;
vctr.push_back(item);


P.S.
Boost лежит здесь.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Почему не работает vector<int[10]>?
От: Bell Россия  
Дата: 22.09.04 12:52
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Вот такой код:


А>
А>std::vector<int[10]> vctr;
А>int item[10] = {0};
А>vctr.push_back( item );
А>


А>Ошибка: cannot convert from "const int[10]" to "int[10]".

А>Почему и как с этим бороться?

Тип int[10] не обладает свойствами copy-constructable и assignable, и поэтому объекты этого типа не могут использоваться в качестве элементов стандартных контейнеров.

А>vector<vector<int> > не хотелось бы..

Попробуй boost::array, или напиши простую структурку:


struct arr10
{
   int arr_[10];
   int& operator[](size_t n) { return arr_[n]; }
   int operator[](size_t n) const { return arr_[n]; }
};

int main()
{
std::vector<arr10> vctr;
arr10 item = {0};
vctr.push_back( item );
 return 0;
}
Любите книгу — источник знаний (с) М.Горький
Re[2]: Почему не работает vector<int[10]>?
От: _nn_ www.nemerleweb.com
Дата: 22.09.04 12:55
Оценка: +1
Здравствуйте, Bell, Вы писали:

B>[ccode]

B>struct arr10
B>{
B> int arr_[10];
B> int& operator[](size_t n) { return arr_[n]; }
B> int operator[](size_t n) const { return arr_[n]; }
B>};
Раз уж мы в С++ то тогда так, а то потом будет вопрос а что делать если нужно int[20] поместить в векторе.
template<typename T, size_t N>
struct arr
{
 T arr_[N];
 T& operator[](size_t n) { return arr_[n]; }
 T operator[](size_t n) { return arr_[n]; }
};

typedef arr<int,10> arr10;
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Почему не работает vector<int[10]>?
От: Bell Россия  
Дата: 22.09.04 12:58
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Раз уж мы в С++ то тогда так, а то потом будет вопрос а что делать если нужно int[20] поместить в векторе.

__>
__>template<typename T, size_t N>
__>struct arr
__>{
__> T arr_[N];
__> T& operator[](size_t n) { return arr_[n]; }
__> T operator[](size_t n) { return arr_[n]; }
__>};

__>typedef arr<int,10> arr10;
__>


Это, безусловно, хорошая альтернатива boost:.array
Любите книгу — источник знаний (с) М.Горький
Re[4]: Почему не работает vector<int[10]>?
От: _nn_ www.nemerleweb.com
Дата: 22.09.04 13:05
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, _nn_, Вы писали:


__>>Раз уж мы в С++ то тогда так, а то потом будет вопрос а что делать если нужно int[20] поместить в векторе.

__>>
__>>template<typename T, size_t N>
__>>struct arr
__>>{
__>> T arr_[N];
__>> T& operator[](size_t n) { return arr_[n]; }
__>> T operator[](size_t n) { return arr_[n]; }
__>>};

__>>typedef arr<int,10> arr10;
__>>


B>Это, безусловно, хорошая альтернатива boost:.array


Ну лучше не придумал в 8 строк
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Почему не работает vector<int[10]>?
От: PM  
Дата: 22.09.04 13:08
Оценка:
Здраствуйте, _nn_, Вы писали:

Есть предложение по улучшению
n> __>>Раз уж мы в С++ то тогда так, а то потом будет вопрос а что делать
n> если нужно int[20] поместить в векторе. __>>[c]
n> __>>template<typename T, size_t N>
n> __>>struct arr
n> __>>{
n> __>> T arr_[N];
n> __>> T& operator[](size_t n) { return arr_[n]; }
n> __>> T const&operator[](size_t n) const{ return arr_[n]; }
n> __>>};
foobar2000 v0.8.3: London Elektricity vs Robert O — My Dream [Hospital (NHS 028)]
Re[6]: Почему не работает vector<int[10]>?
От: _nn_ www.nemerleweb.com
Дата: 22.09.04 13:11
Оценка: :))
Здравствуйте, PM, Вы писали:

PM>Здраствуйте, _nn_, Вы писали:


PM>Есть предложение по улучшению

n>> __>>Раз уж мы в С++ то тогда так, а то потом будет вопрос а что делать
n>> если нужно int[20] поместить в векторе. __>>[c]
n>> __>>template<typename T, size_t N>
n>> __>>struct arr
n>> __>>{
n>> __>> T arr_[N];
n>> __>> T& operator[](size_t n) { return arr_[n]; }
n>> __>> T const&operator[](size_t n) const{ return arr_[n]; }
n>> __>>};
Есть предложение по улучшению -> boost::array, просто сдираем код и радуемся жизни
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Почему не работает vector<int[10]>?
От: jazzer Россия Skype: enerjazzer
Дата: 22.09.04 13:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вот такой код:


А>
А>std::vector<int[10]> vctr;
А>int item[10] = {0};
А>vctr.push_back( item );
А>


А>Ошибка: cannot convert from "const int[10]" to "int[10]".

А>Почему и как с этим бороться?
А>vector<vector<int> > не хотелось бы..

потому что встроенный массив — тип весьма непродуманный: для него нет копирования, и, как следствие, передачи по значению и т.д. и т.п.

так что извращайся через boost::array
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[6]: Почему не работает vector<int[10]>?
От: ssm Россия  
Дата: 22.09.04 13:29
Оценка:
Здравствуйте, PM, Вы писали:

PM>Здраствуйте, _nn_, Вы писали:


PM>Есть предложение по улучшению


тада уже так:
typename boost::call_traits<T>::param_type operator[](size_t n) const{ return arr_[n]; }

Re[7]: Почему не работает vector<int[10]>?
От: PM  
Дата: 22.09.04 13:34
Оценка:
Здраствуйте, ssm, Вы писали:

PM>> Есть предложение по улучшению


s> тада уже так:

s>
s> typename boost::call_traits<T>::param_type operator[](size_t n) const{ return arr_[n]; }
s>

s>
Эо потянет за собой буст. Вместо этого нужно написать аналог call_traits и всю мета-крутизну от которой оно зависит (is_class etc.)
foobar2000 v0.8.3: Marcus Intalex & ST Files — Play On Me [Soul:r (SOUL:R 001)] (пауза)
Re[3]: Почему не работает vector<int[10]>?
От: Вадим Никулин Россия Здесь
Дата: 22.09.04 13:37
Оценка:
Здравствуйте, _nn_, Вы писали:

__>Здравствуйте, Bell, Вы писали:


B>>
__> T operator[](size_t n) { return arr_[n]; }
__>


Я бы это заменил на
const T &operator[]( size_t n ) const { return arr_[n]; }

И волки целы, и овцы сыты
Re[8]: Почему не работает vector<int[10]>?
От: ssm Россия  
Дата: 22.09.04 13:38
Оценка:
Здравствуйте, PM, Вы писали:

PM>Эо потянет за собой буст. Вместо этого нужно написать аналог call_traits и всю мета-крутизну от которой оно зависит (is_class etc.)

ну что ж, прийдется Анониму попотеть либо написать специализацию для int
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.