LINUX.ORG.RU

Пара вопросов о std::valarray

 


1

3

1. Почему конструктор для valarray сделали не в том же стиле, что и vector.

valarray( const T& val, std::size_t count );

vector( size_type count, const T& value,
        const Allocator& alloc = Allocator() );
Есть ли смысл в том, чтобы первым параметром указывать значение, а не наоборот?

2. Почему слайсы valarray не являются stl контейнерами и для них нет итератора?

std::valarray<int> a(n);
...
for(auto x : a[std::slice(0, 50, 2)]){
    std::cout<<x<<"\n";
}
Я ожидал бы, что такой код выведет все элементы из a с чётными индексом, но нет.

★★★★★

не являются stl контейнерами

Ответ на оба вопроса.

Это попытка в (высшую) математику, которая в std не нужна.

anonymous
()

Первый твой вопрос уже спрашивали у комитета:

https://cplusplus.github.io/LWG/lwg-closed.html#107

😱 Opened: 1998-10-07

Второй тоже можно спросить у комитета, я не нашёл чтобы уже спрашивали. Технически я думаю это легко можно сделать, по крайней мере я не вижу причин почему нельзя.

fsb4000 ★★★★★
()
Последнее исправление: fsb4000 (всего исправлений: 2)
// std::valarray<T> operator[]( std::slice slicearr ) const
// const-метод возвращает valarray, для которого есть begin(), end()

std::valarray<int> a(n);
const auto& const_a = a;
for(auto x : const_a[std::slice(0, 50, 2)]){...}
anonymous
()

Как там с многомерными массивами? Есть ли уже вменяемые классы для работы с, например, трехмерными матрицами a[i][j][k] ?

anonymous
()
Ответ на: комментарий от anonymous

Как там с многомерными массивами? Есть ли уже вменяемые классы для работы с, например, трехмерными матрицами a[j][k] ?

В стандартной библиотеке — нет. Варианты либо boost::multi_array, либо Eigen::Tensor, либо еще что-то.

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Блин, до меня только сейчас дошло, что для slice_array нет operator[]. Странно.

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от fsb4000

Технически я думаю это легко можно сделать, по крайней мере я не вижу причин почему нельзя.

Вот это меня и удивляет, что сделать было бы несложно, но..

Waterlaz ★★★★★
() автор топика
Ответ на: комментарий от Waterlaz

Вот это меня и удивляет, что сделать было бы несложно, но..

Никто не писал в комитет. Это как с багами компилятора, кто-то нашёл что-нибудь и годами об этом только на форумах пишет, а не отправил отчёт об ошибке разработчикам, и удивляется что ошибку не исправили…

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Смысл писать, эта «математика» почти неприменима, неюзабельна, даже для лабораторных работ. Нет ошибок, если никто не использует. Лучше range использовать, хотя в том виде, как в c++20, range тоже бесполезны.

Для настоящей математики есть спец.библиотеки.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.