बदलने के लिए कैसे के प्रकार के तत्वों में सी++ को बढ़ावा देने के बहु सरणी?

0

सवाल

मैं प्राप्त एक मैट्रिक्स के साथ तत्वों के प्रकार unsigned char से एक अन्य समारोह के लिए और मैं कोशिश कर रहा हूँ खोजने के लिए इसकी अधिकतम मूल्य.

boost::multi_array<unsigned char, 2> matrix;

सभी तत्वों integers हैं और इसलिए मैं उम्मीद कर रहा था करने के लिए मरम्मत के रूप में मैट्रिक्स प्रकार <int, 2> तो प्रदर्शन एसटीडी::max_element() आपरेशन, लेकिन करने के लिए कैसे अनिश्चित मरम्मत के प्रकार के लिए एक को बढ़ावा देने के बहु सरणी.

boost c++
2021-11-21 09:26:22
1

सबसे अच्छा जवाब

1

आप की जरूरत नहीं है कि उपयोग करने के लिए max_element. char एक अभिन्न प्रकार की तरह बस int:

पर रहते हैं, संकलक एक्सप्लोरर

#include <boost/multi_array.hpp>
#include <fmt/ranges.h>
#include <algorithm>

int main() {
    using boost::extents;
    boost::multi_array<unsigned char, 2> matrix(extents[10][5]);

    std::iota(         //
        matrix.data(), //
        matrix.data() + matrix.num_elements(), '\x30');

    fmt::print("matrix: {}\n", matrix);

    auto [a, b] = std::minmax_element(matrix.data(),
                                    matrix.data() + matrix.num_elements());

    // as integers
    fmt::print("min: {}, max {}\n", *a, *b);
    // as characters
    fmt::print("min: '{:c}', max '{:c}'\n", *a, *b);
}

कार्यक्रम stdout

matrix: {{48, 49, 50, 51, 52}, {53, 54, 55, 56, 57}, {58, 59, 60, 61, 62}, {63, 64, 65, 66, 67}, {68, 69, 70, 71, 72}, {73, 74, 75, 76, 77}, {78, 79, 80, 81, 82}, {83, 84, 85, 86, 87}, {88, 89, 90, 91, 92}, {93, 94, 95, 96, 97}}
min: 48, max 97
min: '0', max 'a'

Reinterpreting देखें

यदि आप करना चाहिए (अन्य कारणों के लिए thatn का उपयोग कर max_element) आप कर सकते हैं का उपयोग करें multi_array_ref:

// reinterpreting view:
boost::multi_array_ref<const char, 2> view(
    reinterpret_cast<const char*>(matrix.data()),
    std::vector(matrix.shape(), matrix.shape() + 2));

fmt::print("view: {}\n", view);

जो प्रिंट पर रहते हैं संकलक एक्सप्लोरर

view: {{'0', '1', '2', '3', '4'}, {'5', '6', '7', '8', '9'}, {':', ';', '<', '=', '>'}, {'?', '@', 'A', 'B', 'C'}, {'D', 'E', 'F', 'G', 'H'}, {'I', 'J', 'K', 'L', 'M'}, {'N', 'O', 'P', 'Q', 'R'}, {'S', 'T', 'U', 'V', 'W'}, {'X', 'Y', 'Z', '[', '\'}, {']', '^', '_', '`', 'a'}}

आप भी कर सकते हैं इसे नयी आकृति प्रदान करना:

view.reshape(std::vector{25, 2});
fmt::print("reshaped: {}\n", view);

मुद्रण

reshaped: {{'0', '1'}, {'2', '3'}, {'4', '5'}, {'6', '7'}, {'8', '9'}, {':', ';'}, {'<', '='}, {'>', '?'}, {'@', 'A'}, {'B', 'C'}, {'D', 'E'}, {'F', 'G'}, {'H', 'I'}, {'J', 'K'}, {'L', 'M'}, {'N', 'O'}, {'P', 'Q'}, {'R', 'S'}, {'T', 'U'}, {'V', 'W'}, {'X', 'Y'}, {'Z', '['}, {'\', ']'}, {'^', '_'}, {'`', 'a'}}
2021-11-21 13:34:12

जोड़ा गया एक शाब्दिक जवाब देने के लिए सवाल के रूप में पूछा, सिर्फ अच्छे उपाय के लिए
sehe

और यहाँ सब कुछ का उपयोग कर के बिना libfmt, बस का उपयोग कर iostream उत्पादन के लिए: coliru.stacked-crooked.com/a/d36a83decb67d92b (सुंदर भयानक, है ना :))
sehe

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में