如何在 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<std::allocator<double>, double>::value_type’ aka ‘double’ to ‘int’ may change value [-Werror=float-conversion]
此错误发生在执行int num = all_val[i][0];
的行。
我真的不知道这里发生了什么,我对C++
很陌生,所以它一定很明显,我不明白。有没有办法解决这个问题?
【问题讨论】:
具体发生在哪一行?该行发生了什么可以解释警告?顺便说一句:你应该已经从你的代码中提取了一个minimal reproducible example,它可能已经指出了错误。 为什么要将double
转换为int
? all_val[i][0]
是 double
,num
是 int
。
将int num
更改为auto num
好吧,如果您尝试将3.14
存储到int
中会发生什么?
请记住,double
是双精度浮点类型。如果你只需要一个更大的整数,你可以使用long
或long long
【参考方案1】:
您正在尝试另存为 int:
int num = all_val[i][0];
什么应该是双重的:
using matrix = std::vector<std::vector<double>>;
因此将num
的类型说明符更改为double
或auto
:
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++ 中检索矩阵的每个向量的第一个元素?的主要内容,如果未能解决你的问题,请参考以下文章