将矩阵加载到2D矢量C ++中

时间:2017-10-16 20:11:49

标签: c++ 2d-vector

我不熟悉在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都会被省略。我相信问题出现在语句中(split&gt;&gt; value),但我不知道如何以更好的方式对其进行编码。

2 个答案:

答案 0 :(得分:1)

替换

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'));
}

并完全删除你的字符串流。

答案 1 :(得分:1)

看起来你好像想要存储比特,但不知何故挣扎着将包含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'; } } 之类的内容。希望它有所帮助。

import java.util.Arrays;
import java.util.Scanner;

/*
 * Java Program to take array input from the user using Scanner.
 */

public class runtime_array {

public static void main(String[] args) {

//display message

System.out.println("Program creates array size at run-time");
System.out.println("Program rounds sum and average of numbers to two decimal 
places");
System.out.println("Note: numbers *must* be float data type");
System.out.println(); //blank line

 // taking String array input from user
Scanner input = new Scanner(System.in);
System.out.println("Please enter length of String array");
float myFloath = input.nextFloat();
int  num1 = 0, num2 = 0, num3 = 0;


// create a String array to save user input
String[] input = new String[length];

// loop over array to save user input
System.out.println("Please enter array elements");
for (int i = 0; i < length; i++) {
  String userInput = input.next();
  input[i] = userInput;
}

System.out.println("The String array input from user is : ");

int sum = 0;
int average =0;