2013-09-09 4 views
0

У меня есть файл, который идет как это:Раздвигая вектор в другой вектор

98 
287 2352 
987 4313 3253 
235 34325 432 123 

В основном я хочу, чтобы воспроизвести этот файл. Я пытаюсь импортировать строку за раз, извлекать числа и вставлять их в векторы. Каждый вектор вставляется в больший вектор.

int main(int argc, char* argv[]) 
{ 
    int sum = 0, one = 0, two = 1; 
    std::string line, number; 
    std::vector<int> vec; 
    std::vector<std::vector<int>> bigvec; 
    auto k = vec.begin(); 
    std::ifstream in(argv[1]); 
    while(in >> line) { 
     std::istringstream is(line); 
     while(is >> number) { 
      vec.push_back(stoi(number)); 
     } 
     bigvec.push_back(vec); 
     while(!vec.empty()) { 
      vec.pop_back(); 
     } 
     std::cout << std::endl; 
    } 
    return 0; 
} 

Мой код, хотя, когда я печатаю результат, кажется, помещает каждое число в его собственном векторе вместо воспроизведения файла.

Так что мой вывод

98 
287 
2352 
etc. 

кажется, что линия

while(is >> number) { 
    vec.push_back(stoi(number)); 
} 

толкает один номер, а затем выходит из цикла.

Куда я иду не так?

+6

'while (! Vec.empty()) {vec.pop_back(); } 'Eww! 'vec.clear();' будет делать именно это. – jrok

+2

'std :: string number;' Eww! 'int number; while (is >> number) {vec.push_back (number);} 'будет прекрасно. – andre

+0

Собирался сказать то же самое :) – Chemistpp

ответ

4

while(in >> line) читает следующий слово от входа. Используйте getline(in, line), если вы хотите прочитать целую строку .

Существует несколько оптимизаций, которые вы можете добавить в свой код. Например, вместо использования stoi в строке, которую вы прочитали, вы можете прочитать целое число из входного потока. Также вместо того, чтобы вытаскивать элементы вектора один за другим, вы можете просто позвонить clear.

4

Ваша проблема заключается здесь:

while(in >> line) 

C++ по defult читает, пока он не встречает интервального или новую строку. В вашем случае он встречает интервал перед новой строкой. Если вы хотите взять на себя взять всю строку:

getline(cin, line); 
Смежные вопросы