如何在 C++ 中检索矩阵的每个向量的第一个元素?

Posted

技术标签:

【中文标题】如何在 C++ 中检索矩阵的每个向量的第一个元素?【英文标题】:How to retrieve the first element of each vector of a matrix in C++? 【发布时间】:2021-03-04 08:21:15 【问题描述】:

假设矩阵定义为:

using matrix = std::vector<std::vector<double>>;

我正在尝试打印此矩阵中每个向量的第一个元素。

std::vector<double> print_first_val(const matrix& all_val)


    std::vector<double> first_vals;

    long unsigned int size_of = all_val.size();

    for (unsigned int i = 0; i < size_of; i++)
    
        int num = all_val[i][0];
        first_vals.push_back(num);
    
    return first_vals;

int main()

    matrix input   1, 2, 2, 2, 3, 4 ,  -1, 1, 1.2, 2, 3.4, 4, 4 ,  0, 3, 3, 4.5  ;

    auto output_2 = print_first_val(input);
    for (auto x : output_2) 
        std::cout << x << " ";

但是,我收到了这个错误:

conversion from ‘__gnu_cxx::__alloc_traits&lt;std::allocator&lt;double&gt;, double&gt;::value_type’ aka ‘double’ to ‘int’ may change value [-Werror=float-conversion]

此错误发生在执行int num = all_val[i][0]; 的行。

我真的不知道这里发生了什么,我对C++ 很陌生,所以它一定很明显,我不明白。有没有办法解决这个问题?

【问题讨论】:

具体发生在哪一行?该行发生了什么可以解释警告?顺便说一句:你应该已经从你的代码中提取了一个minimal reproducible example,它可能已经指出了错误。 为什么要将double 转换为intall_val[i][0]doublenumint int num更改为auto num 好吧,如果您尝试将3.14 存储到int 中会发生什么? 请记住,double 是双精度浮点类型。如果你只需要一个更大的整数,你可以使用longlong long 【参考方案1】:

您正在尝试另存为 int:

int num = all_val[i][0];

什么应该是双重的:

using matrix = std::vector<std::vector<double>>;

因此将num 的类型说明符更改为doubleauto

auto num = all_val[i][0];

下面是一个可重现的例子:

#include <iostream>
#include <vector>

using matrix = std::vector<std::vector<double>>;

std::vector<double> print_first_val(const matrix& all_val)

    std::vector<double> first_vals;

    long unsigned int size_of = all_val.size();

    for (unsigned int i = 0; i < size_of; i++)
    
        auto num = all_val[i][0];
        first_vals.push_back(num);
    
    return first_vals;



int main()

    matrix input   1, 2, 2, 2, 3, 4 ,  -1, 1, 1.2, 2, 3.4, 4, 4 ,  0, 3, 3, 4.5  ;

    auto output_2 = print_first_val(input);
    for (auto x : output_2) 
        std::cout << x << " ";
    

或者设置编译标志:

-Wno-error=float-conversion

【讨论】:

【参考方案2】:

除了@BiOS的解释,在访问第一个元素之前应该检查向量大小。

阅读更多:在 C++ 向量中访问超出大小的元素 https://***.com/a/19262233/15254914

【讨论】:

以上是关于如何在 C++ 中检索矩阵的每个向量的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中对向量组元素进行排序?

matlab 如何求一个矩阵所有元素的绝对值的和

通过从向量的其他元素中减去向量的每个元素来制作矩阵

在 C++ 中并行查找向量的第一个

C++:向量“损坏”的第一个元素

如何将唯一指针向量中的每个元素排入队列? (C++)