将矩阵加载到 2D 矢量C++中
Loading a Matrix into a 2D vector C++
我是C++中使用向量的新手,我的目标是从文本文件中读取矩阵并将它们存储到2D向量中,我的代码如下:
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main()
{
std::ifstream in("input.txt");
std::vector<std::vector<int> > v;
if (in) {
std::string line;
while (std::getline(in, line)) {
v.push_back(std::vector<int>());
// Break down the row into column values
std::stringstream split(line);
int value;
while (split >> value)
v.back().push_back(value);
}
}
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v[i].size(); j++)
std::cout << v[i][j] << ' ';
std::cout << 'n';
}
}
现在输入说
10101010
01010101
10101011
01011010
我得到的输出
10101010
1010101
10101011
1011010
即每次在行首遇到 0 时,都会省略它。我相信问题出在语句 while(split>>value),但我不知道如何以更好的方式对其进行编码。
似乎您真的想存储位,但不知何故难以将包含10101010
的行解析为一系列位。如果您知道每行的最大位数,则可以使用 bitset<N>
,它为可以直接读取 10101010
的运算符>>
提供了易于使用的重载。希望对您有所帮助。
int main()
{
std::ifstream in("input.txt");
std::vector<std::bitset<8> >v;
if (in) {
std::bitset<8> bits;
while (in >> bits) {
v.push_back(bits);
}
}
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v[i].size(); j++)
std::cout << v[i][j] << ' ';
std::cout << 'n';
}
}
替换
while (split >> value)
v.back().push_back(value);
跟
for(int x=0; x<line.size(); x++){
v.back().push_back((int)line[x] - (int)'0'));
}
并完全删除您的字符串流。
相关文章:
- 分段故障(堆芯转储)矢量
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 将二维矢量传递给类
- 读取文件并输入到矢量中
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 无法通过空白将文本文件行分隔为矢量
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 正在将csv文件读取为双精度矢量
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何通过 getter 函数删除矢量的元素?
- 如何在C++中将数组转换为矢量指针
- 在C++中将矢量转换为嵌套地图
- C++矢量迭代
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 将矢量<T>转换为矢量<数组<T>>
- 指针或结构的矢量
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 用于矢量处理的多个线程
- 反向矢量3
- cmath抛出错误C2062、C2059、C2143和C2447.cmath包含在矢量文件中