Вектор: делает вектор функции (постоянный вектор& Икс );просто взять адрес, где хранится массив? - PullRequest
0 голосов
/ 24 февраля 2012

Если это так, можем ли мы предположить, что в конце массива будет нулевой терминатор?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Конструктор копирования vector не просто копирует указатель во внутреннее хранилище вектора;он создает копию содержимого другого вектора.(Если бы он просто скопировал указатель, то изменения, внесенные в один вектор, будут отражены в другом векторе, и, как вы знаете, класс vector ведет себя не так.)

Более того, нет никаких гарантийчто есть что-то особенное, отмечающее конец внутреннего хранилища вектора.(И внутреннее хранилище не обязательно является массивом.) Чтобы определить конец вектора, используйте функцию size, чтобы помочь определить максимально допустимый индекс для вектора, или сравните итератор с возвращаемым end итератором.,Не ищите дозорного значения, если вы сами его не поместите, или в документации к вашей библиотеке не указано, что оно будет.

0 голосов
/ 24 февраля 2012

Предположительно, вы говорите о конструкторе std::vector<T>.Это конструктор копирования , и он принимает не адрес массива, а константную ссылку на другой вектор.Вы, поставщик этого другого вектора, не должны добавлять завершающий ноль.

std::vector<int> mine;
std::vector<int> theirs(mine);  // no particular change required for mine
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...