Форум программистов, компьютерный форум CyberForum.ru

Как считать матрицу из файла в двумерный вектор - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
27.10.2012, 14:20     Как считать матрицу из файла в двумерный вектор #1
Доброго времени суток, начал писать шифр Скитала И столкнулся с такой проблемой, но могу считать матриwe размером 4х4 в двумерный вектор из файла! подскажите как реализовать! Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 14:20     Как считать матрицу из файла в двумерный вектор
Посмотрите здесь:

Считать матрицу из файла C++
Как считать матрицу из файла без указания размерности? C++
C++ считать матрицу с файла
C++ как считать вектор из файла?
Как считать матрицу 3*3 из файла если он там задан неправильно C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
27.10.2012, 14:31     Как считать матрицу из файла в двумерный вектор #2
Как задаете двумерный вектор в программе и как матрица выглядит в файле?
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
27.10.2012, 14:47     Как считать матрицу из файла в двумерный вектор #3
C++
1
2
3
4
5
6
7
8
    std::vector<std::vector<int>> v;
    std::vector<int> tmp(4);
    std::ifstream f(L"1.txt");
    while(!f.eof())
    {
        std::copy_n(std::istream_iterator<int>(f), 4, tmp.begin());
        v.push_back(tmp);
    }
Числа в файле через пробел. Построчно:
1 2 3 4
5 6 7 67
12 3 1 23
45 2 3 1
Добавлено через 6 минут
Или как-нибудь так:
C++
1
2
3
4
5
6
7
    std::vector<std::vector<int>> v;
    std::ifstream f(L"D:\\tmp\\1.txt");
    while(!f.eof())
    {
        v.push_back(std::vector<int>(4));
        std::copy_n(std::istream_iterator<int>(f), 4, v.back().begin());
    }
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
27.10.2012, 15:18  [ТС]     Как считать матрицу из файла в двумерный вектор #4
Спасибо, разобрался! Помогли!
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
09.11.2012, 17:06     Как считать матрицу из файла в двумерный вектор #5
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
    std::vector<std::vector<int>> v;
    std::vector<int> tmp(4);
    std::ifstream f(L"1.txt");
    while(!f.eof())
    {
        std::copy_n(std::istream_iterator<int>(f), 4, tmp.begin());
        v.push_back(tmp);
    }
Числа в файле через пробел. Построчно:


Добавлено через 6 минут
Или как-нибудь так:
C++
1
2
3
4
5
6
7
    std::vector<std::vector<int>> v;
    std::ifstream f(L"D:\\tmp\\1.txt");
    while(!f.eof())
    {
        v.push_back(std::vector<int>(4));
        std::copy_n(std::istream_iterator<int>(f), 4, v.back().begin());
    }
в обоих вариантах одни и те же ошибки

Код
Ошибка	1	error C2782: ::std::_Enable_if<!std::_Is_checked_iterator<_OutIt>::_Result,_OutIt>::_Result std::copy(_InIt,_InIt,_OutIt): в шаблон параметр "_InIt" неоднозначен	c:\users\123\desktop\achtung\tokb\matrix\matrix\main.cpp	15	matrix
Ошибка	2	error C2782: _OutElem *std::copy(_InIt,_InIt,_OutElem (&)[_Size]): в шаблон параметр "_InIt" неоднозначен	c:\users\123\desktop\achtung\tokb\matrix\matrix\main.cpp	15	matrix
Ошибка	3	error C2782: ::std::_Enable_if<std::_Is_checked_iterator<_OutIt>::_Result,_OutIt>::_Result std::copy(_InIt,_InIt,_OutIt): в шаблон параметр "_InIt" неоднозначен	c:\users\123\desktop\achtung\tokb\matrix\matrix\main.cpp	15	matrix
+ copy_n не определен, его на просто copy можно заменять?
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 17:15     Как считать матрицу из файла в двумерный вектор #6
C++
1
#include <algorithm>
сделали?
если не помогло, то у вас нет такого стандартного метода
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
09.11.2012, 17:16     Как считать матрицу из файла в двумерный вектор #7
алгоритм инклюдил, все равно.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.11.2012, 17:20     Как считать матрицу из файла в двумерный вектор #8
Цитата Сообщение от Tiva Посмотреть сообщение
его на просто copy можно заменять?
copy не принимает кол-во элементов. Поэтому в данном примере - нет, будет ошибка компиляции.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
09.11.2012, 21:30     Как считать матрицу из файла в двумерный вектор #9
Цитата Сообщение от Vourhey Посмотреть сообщение
copy не принимает кол-во элементов. Поэтому в данном примере - нет, будет ошибка компиляции.
как тогда быть?
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.11.2012, 21:31     Как считать матрицу из файла в двумерный вектор #10
Цитата Сообщение от Tiva Посмотреть сообщение
как тогда быть?
Писать другой код.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
09.11.2012, 21:36     Как считать матрицу из файла в двумерный вектор #11
C++
1
2
3
4
5
6
7
8
9
10
void Matrix::SaveMatrix()
{
    ofstream ofst(FNAME_MATRIX);
    matrix_iterator iterlvl2;
        vector< int >::iterator iterlvl1;
        for (iterlvl2=v.begin();iterlvl2 != v.end();iterlvl2++) {
            iterlvl1 = (*iterlvl2).begin();
            ofst<<(*iterlvl2)<<" "; 
        }
}
по аналогу с добавлением\удалением сделал, но не принимает вижуалка...
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.11.2012, 21:42     Как считать матрицу из файла в двумерный вектор #12

Не по теме:

Tiva, как то, что ты написал относится к теме, в которой ты это пишешь?



Добавлено через 2 минуты
Tiva, и вообще, как вывести матрицу в аутпутстрим я уже писал в другой теме тебе же. Хватит здесь оффтопить.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
09.11.2012, 22:13     Как считать матрицу из файла в двумерный вектор #13
2008kedr2008, так попробуй:
C++
1
2
3
4
5
6
7
8
9
10
std::ifstream ifs("filename");
std::size_t const n = 4;
std::vector<std::vector<int> > matrix;
matrix.reserve(n);   
   
std::string line;
for (std::size_t i = 0; (i != n) && std::getline(ifs, line); ++i) {
   std::istringstream iss(line);
   matrix.push_back(std::vector<int>(std::istream_iterator<int>(iss), std::istream_iterator<int>()));
}
Добавлено через 17 минут
Хотя глупость написал
C++
1
2
3
4
5
6
7
8
std::ifstream ifs("filename");
std::vector<std::vector<int> > matrix(4, std::vector<int>(4));
 
for (std::size_t i = 0; i != matrix.size(); ++i) {
   for (std::size_t j = 0; j != matrix[i].size(); ++j) {
      ifs >> matrix[i][j];
   }
}
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
12.11.2012, 15:20     Как считать матрицу из файла в двумерный вектор #14
Цитата Сообщение от gray_fox Посмотреть сообщение
2008kedr2008, так попробуй:
C++
1
2
3
4
5
6
7
8
9
10
std::ifstream ifs("filename");
std::size_t const n = 4;
std::vector<std::vector<int> > matrix;
matrix.reserve(n);   
   
std::string line;
for (std::size_t i = 0; (i != n) && std::getline(ifs, line); ++i) {
   std::istringstream iss(line);
   matrix.push_back(std::vector<int>(std::istream_iterator<int>(iss), std::istream_iterator<int>()));
}
Добавлено через 17 минут
Хотя глупость написал
C++
1
2
3
4
5
6
7
8
std::ifstream ifs("filename");
std::vector<std::vector<int> > matrix(4, std::vector<int>(4));
 
for (std::size_t i = 0; i != matrix.size(); ++i) {
   for (std::size_t j = 0; j != matrix[i].size(); ++j) {
      ifs >> matrix[i][j];
   }
}
вот мой пример(ваш не подходит, т.к. вектор изначально пустой, и кол-во элементов в файле не известно и надо пушбечить)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Matrix::LoadMatrix()
{
    
    ifstream ifst(FNAME_MATRIX);
    while(!ifst.eof())
    {
                int temp;
 
                ifst >> temp;
        matrix_iterator iterlvl2;
        vector< int >::iterator iterlvl1;
        for (iterlvl2=v.begin();iterlvl2 != v.end();iterlvl2++) 
        {
            iterlvl1 = (*iterlvl2).begin();
            (*iterlvl2).push_back(temp);
        }
    }
}
только он считывает весь файл в одну строку, а не так, как он хранится в файле. помогите.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
12.11.2012, 15:31     Как считать матрицу из файла в двумерный вектор #15
Tiva, что тебе мешает читать построчно?
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
12.11.2012, 16:32     Как считать матрицу из файла в двумерный вектор #16
Цитата Сообщение от Vourhey Посмотреть сообщение
Tiva, что тебе мешает читать построчно?
а как потом строку разбивать на цисла и записывать их "построчно" в вектор? у меня опять получается что все записывается в одну строку вектора.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
12.11.2012, 17:18     Как считать матрицу из файла в двумерный вектор #17
Цитата Сообщение от Tiva Посмотреть сообщение
а как потом строку разбивать на цисла и записывать их "построчно" в вектор?
Блин, что ты выдумываешь сложности там, где их нет? Зачем тебе знать о "построчно", когда ты уже строку считал одну? Вот текстом, если написать, то логика в общем виде такая:
пока не конец файла
{
создаем новый вложенный вектор
читаем строку
разбиваем строку по пробелам (пробел как разделитель) - алгоритм любой
забиваем значения во вложенный вектор
}
Уже в одну строчку не получится. Потому что на каждой итерации следующая строка пойдет в новый вложенный вектор.
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
13.11.2012, 13:21     Как считать матрицу из файла в двумерный вектор #18
Цитата Сообщение от Vourhey Посмотреть сообщение
пока не конец файла
{
создаем новый вложенный вектор
читаем строку
разбиваем строку по пробелам (пробел как разделитель) - алгоритм любой
забиваем значения во вложенный вектор
}
что за вложенный вектор? вектор вектора?
и как это делить и каким алгоритмом, и как это потом забивать я и не могу понять. у меня тупо все в одну строчку вектора записыватся.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
13.11.2012, 13:49     Как считать матрицу из файла в двумерный вектор #19
C++
1
2
3
4
5
std::string line;
while (std::getline(ifs, line)) {
   std::istringstream iss(line);
   matrix.push_back(std::vector<int>(std::istream_iterator<int>(iss), std::istream_iterator<int>()));
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2012, 16:30     Как считать матрицу из файла в двумерный вектор
Еще ссылки по теме:

C++ ifstream (считать матрицу из файла в двумерный вектор)
Считать вектор из файла, записать вектор в файл C++
C++ Считать слова строк из файла в вектор векторов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.11.2012, 16:30     Как считать матрицу из файла в двумерный вектор #20
Цитата Сообщение от Tiva Посмотреть сообщение
что за вложенный вектор? вектор вектора?
Это ты меня спрашиваешь? Это тебе писать надо, ты сам должен знать, что там у тебя. В этой теме вообще-то именно двумерный вектор обсуждается.
Цитата Сообщение от Tiva Посмотреть сообщение
и как это делить и каким алгоритмом
Если ты не знаешь стандартного алгоритма, то напиши свой руками.
Цитата Сообщение от Tiva Посмотреть сообщение
и как это потом забивать я и не могу понять
push_back'ом, как и всегда.
Yandex
Объявления
13.11.2012, 16:30     Как считать матрицу из файла в двумерный вектор
Ответ Создать тему
Опции темы

Текущее время: 12:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru