В настоящее время я использую конструктор диапазона std::vector
для создания другого вектора данного поддиапазона.
std::vector<int> myVect { 1, 2, 3, 4 };
std::vector<int> subrangeVector(myVect.begin(), myVect.begin() + 2);
Однако это приводит к тому, что ранжированные значения myVect копируются и занимают дополнительную память.Это то, что нежелательно при работе с ограниченной памятью и / или с очень большими типами элементов.
Как создать поддиапазон другого вектора по ссылке?
Упрощенное объяснение моей цели заключается в следующем:
void fun(std::vector<int> & v) { v.at(0) = 1; }
int main()
{
std::vector<int> myVect { 1, 2, 3, 4 };
std::size_t upperLimit = 5;
std::vector<int> subrangeVector = subrangeView(myVect, upperLimit);
fun(subrangeVector); // so myVect.at(0) == 1
return 0;
}
Это будет реализовано во многих различных функциях, которые используют std::vector
в качестве параметра.Я не хочу передавать итераторы, как обсуждено здесь .Предположим, что я не контролирую функцию fun
.