Я хочу случайным образом назначить boost::ptr_vector. Используя обычный вектор STL, я бы сделал это:
class A{ }; A* a1 = new A(); A* a2 = new A(); vector<A*> normal_vec; normal_vec.resize(2); normal_vec[1] = a1; normal_vec[0] = a2;
Я пытаюсь сделать то же самое с boost::ptr_vector:
A* a1 = new A(); A* a2 = new A(); ptr_vector<A> boost_vec; boost_vec.resize(2); boost_vec[1] = a1; boost_vec[0] = a2;
Но получаю следующую ошибку:
no match for ‘operator=’ in ‘v.boost::ptr_vector<A>::<anonymous>.boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::operator[] [with T = A, VoidPtrSeq = std::vector<void*, std::allocator<void*> >, CloneAllocator = boost::heap_clone_allocator, boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::reference = A&, boost::ptr_sequence_adapter<T, VoidPtrSeq, CloneAllocator>::size_type = long unsigned int](1ul) = a1’
Но я изо всех сил пытаюсь понять это
См. также: stackoverflow .com/questions/13367079/ — person Aly schedule 14.11.2012
Похоже, вы не читали документацию по типам, которые используете. — person Aly schedule 14.11.2012
В вашем примере std::vector не так, как обычно добавляют к vector. Используйте push_back (после необязательного вызова reserve) вместо operator[]. — person Aly schedule 14.11.2012
Весь смысл boost::ptr_vector в том, что вы не видите указатели. — person Aly schedule 14.11.2012
@Praetorian Я хочу назначить случайным образом, то есть не 0-му, а 1-му индексу (см. Выше). Я делаю v[1], за которым следует v[0] — person Aly schedule 14.11.2012
Вы всегда можете перетасовать упорядоченный вектор или вместо этого поместить случайно выбранный экземпляр объекта в вектор. — person Aly schedule 14.11.2012
@Rook Я не хочу, чтобы он имел случайный порядок, но я хочу назначать его непоследовательно. — person Aly schedule 14.11.2012
Возможно, вы захотите уточнить, что в вашем вопросе я хочу случайным образом назначить boost::ptr_vector, особенно учитывая, что конечный результат случайной вставки и последовательной вставки случайных элементов одинаков… — person Aly schedule 14.11.2012
@Rook заголовок назначается случайным образом для boost::ptr_vector — person Aly schedule 14.11.2012
Источник: