Если вы спрашиваете, как инициализировать константный вектор, чтобы он содержал интересное содержимое, тогда ответ, вероятно, заключается в использовании конструктора копирования. Сначала вы старательно заполняете вектор, а затем создаете из него свой новый вектор констант. Или вы можете использовать шаблон конструктора vector (InputIterator, InputIterator) для инициализации из какого-либо другого вида контейнера или массива. Если массив, то это можно было бы определить с помощью списка инициализации.
Что-то вроде этого, надеюсь, близко к тому, что вы хотите:
const T ra[3] = {t1, t2, t3};
const vector<const T> v(ra, ra+3);
Если вы спрашиваете, как передать константный вектор в функцию, которая принимает вектор, тогда ответ либо:
- вы не можете, потому что функция может изменить вектор, а ваш объект / ссылка является константой. Сделайте неконстантную копию оригинала и передайте ее.
или
- используйте const_cast для удаления константности, чтобы передать ее в функцию, которая принимает неконстантный вектор, но вы точно знаете, что это не изменит вектор.
Последнее является одной из тех вещей, которая совершенно справедливо заставит любого, кто ее видит, комментировать очки и тот факт, что они ничего не делают. Это именно то, для чего предназначен const_cast, но есть достаточно сильный аргумент, который говорит, что если вам нужен const_cast, вы уже проиграли.
Выполнение обеих этих вещей (создание константного вектора из неконстантного с помощью конструктора копирования, а затем отбрасывание константности) определенно неправильно - вы должны были просто использовать неконстантный вектор. Так что выберите не более одного из них, чтобы сделать ...
[Edit: только что заметил, что вы говорите о разнице между вектором и константным вектором . К сожалению, в STL vector и vector являются совершенно не связанными типами, и единственный способ преобразования между ними - копирование. Это разница между векторами и массивами - T ** может быть тихо и безопасно преобразован в const T * const *]