Если вам нужны X последних битов вашего целого числа, используйте двоичную маску :
unsigned last8bitsvalue=(32 bit integer) & 0xFF
unsigned last16bitsvalue=(32 bit integer) & 0xFFFF
Тип компонента контейнеров, таких как векторы, должен быть назначаемым . Ссылки не назначаются (вы можете инициализировать их только один раз, когда они объявлены, и вы не можете заставить их ссылаться на что-то еще позже). Другие неназначаемые типы также не допускаются в качестве компонентов контейнеров, например vector
не допускается.
По самой своей природе ссылки могут быть установлены только во время их создания; т.е. следующие две строки имеют очень разные эффекты:
int & A = B; // makes A an alias for B
A = C; // assigns value of C to B.
Кроме того, это недопустимо:
int & D; // must be set to a int variable.
Однако, когда вы создаете вектор, нет способа присвоить значения его элементам при создании. По сути, вы просто делаете целую группу из последнего примера.
Это недостаток языка C ++. Вы не можете взять адрес ссылки, поскольку попытка сделать это приведет к получению адреса объекта, на который делается ссылка, и, следовательно, вы никогда не сможете получить указатель на ссылку. std :: vector
работает с указателями на свои элементы, поэтому на сохраняемые значения должна быть возможность указывать. Вместо этого вам придется использовать указатели.
boost :: ptr_vector
будет работать.
Edit: было предложением использовать std :: vector
, который не будет работать, потому что вы не можете создать по умолчанию boost :: ref
.
Как уже упоминалось, вы, вероятно, в конечном итоге будете использовать вместо этого вектор указателей.
Однако вы можете рассмотреть возможность использования вместо этого ptr_vector !
]