Предположим, у нас есть массив с 10 элементами, и мы хотим извлечь из него 6-элементный подматрицу, содержащий первые три элемента и три последних элемента. Я не хочу, чтобы выделенный субмассив был независимым массивом, но я хочу, чтобы его элементы указывали на то же место в памяти, что и соответствующие элементы в исходном массиве. Как я могу это сделать?Как вы можете задать адрес элементов в массиве для указания на определенные элементы в другом массиве?
ответ
Вы можете использовать массив указателей, чтобы указать на элементы в другой:
int a[10] = { 5, 3, 7, 4, 9, 2, 0, 3, 3, 6 };
int* b[6];
b[0] = &a[0];
b[1] = &a[1];
и так далее. Вы должны быть уверены, что a
живет не менее, чем b
.
Более идиоматическим решением может быть использование типа диапазона для удержания указателя на первый и один последний элемент, представляющий интерес. Диапазон будет повторяться так же, как и стандартный контейнер библиотеки. См. Например, boost.range
, или вы можете развернуть минимальную и простую версию, используя указатели в качестве итераторов. Это удовлетворит ваш случай использования. Например:
struct range
{
typedef const int* const_iterator;
const_iterator begin() const {return begin_;}
const_iterator end() const { return end_; }
range(const int* begin, const int* end) : begin_(begin), end_(end) {}
std::size_t size() const {return end_ - begin_ };
private:
int* begin_;
int* end_;
};
Затем
int a[10] = { 5, 3, 7, 4, 9, 2, 0, 3, 3, 6 };
range b(&a[0], &a[3);
for (range::const_iterator i = b.begin(); i != b.end(); ++i)
std::cout << *i << " ";
std::cout << std::endl;
Что делать, если у меня есть что-то вроде 'int * b;' в моем классе, и я хочу, чтобы он указывал на элементы массива 'a'? –
'int * b' не является массивом, это указатель на int. Таким образом, вы должны сначала указать его на массив, а затем сделать то же, что и в этом примере. Но это еще одна история и другой вопрос. – juanchopanza
@MohammadSanei Что я сказал в своем предыдущем комментарии, за исключением того, что массив должен быть динамически распределен. В этом случае я бы предложил вам вместо этого использовать вектор указателей. – juanchopanza
- 1. Как я могу повторить определенные элементы в массиве на основе совпадающих значений в другом массиве?
- 2. Адрес элементов в массиве
- 3. Выберите элементы в массиве, где истинны элементы в другом массиве
- 4. Перекопать данные в массиве для проверки элементов в другом массиве
- 5. Как сохранить число элементов объекта в массиве в другом массиве?
- 6. Вставка значений в определенные элементы в массиве
- 7. Поиск элементов в массиве, которые больше, чем в другом массиве
- 8. Как удалить определенные элементы в массиве numpy
- 9. Как вы находите нечетные элементы в массиве?
- 10. Вы можете сделать строку в массиве символов
- 11. Находить элементы не присутствуют в массиве в другом массиве
- 12. Считать элементы в одном массиве в другом массиве matlab
- 13. сохраняют определенные элементы в массиве из массива, которые находятся в другом массиве
- 14. как учитывать определенные элементы в массиве в быстром
- 15. Можете ли вы использовать итератор в массиве?
- 16. Как получить адрес элементов в массиве символов?
- 17. Каков правильный синтаксис для указания нескольких элементов в массиве JavaScript?
- 18. Элементы группы массива на другом массиве
- 19. Проверка наличия элементов в массиве для любых элементов в другом массиве в Visual Basic
- 20. Массив содержит все элементы в другом массиве
- 21. Установить массив элементов не в другом массиве
- 22. Умножение элементов в массиве
- 23. Назначение элементов массива на основе элементов в другом массиве
- 24. Как очистить определенные элементы во вложенном массиве
- 25. операции на массиве NumPy на основе информации в другом массиве
- 26. Элементы проверки верности в массиве
- 27. Хранить все элементы массива в другом массиве для обработки
- 28. Поиск элементов массива в другом массиве
- 29. Сравнение двух элементов в другом массиве структур?
- 30. Как я могу выводить определенные элементы в этом массиве php?
Для начала, используйте [ 'станд :: VECTOR'] (http://en.cppreference.com/w/cpp/container/vector) вместо массивов. Тогда легко получить три последних предмета независимо от их размера. –
Проблема с вашим вопросом заключается в том, что вы не выбрали правильный инструмент для начала работы. Конечно, это можно сделать с помощью массивов, но в итоге вы получите непрактичный, хрупкий и, вероятно, неэффективный код. Я предлагаю вам перефразировать ваш вопрос, чтобы ответ мог быть более общим и, вероятно, полезным для других пользователей. –