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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.67
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
#1

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

27.10.2012, 14:20. Просмотров 2168. Ответов 19
Метки нет (Все метки)

Доброго времени суток, начал писать шифр Скитала И столкнулся с такой проблемой, но могу считать матриwe размером 4х4 в двумерный вектор из файла! подскажите как реализовать! Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 14:20     Как считать матрицу из файла в двумерный вектор
Посмотрите здесь:
C++ ifstream (считать матрицу из файла в двумерный вектор)
C++ Как считать вектор из файла?
Считать вектор из файла, записать вектор в файл C++
Как считать матрицу из файла без указания размерности? C++
Как считать матрицу 3*3 из файла если он там задан неправильно C++
Как считать из файла текст в двумерный массив типа char и отсортировать в алф. порядке? C++
Считать посимфольно из файла в char вектор C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
27.10.2012, 14:31     Как считать матрицу из файла в двумерный вектор #2
Как задаете двумерный вектор в программе и как матрица выглядит в файле?
Vourhey
Почетный модератор
6477 / 2252 / 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.
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
Почетный модератор
6477 / 2252 / 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
Почетный модератор
6477 / 2252 / 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
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
09.11.2012, 21:42     Как считать матрицу из файла в двумерный вектор #12

Не по теме:

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



Добавлено через 2 минуты
Tiva, и вообще, как вывести матрицу в аутпутстрим я уже писал в другой теме тебе же. Хватит здесь оффтопить.
gray_fox
What a waste!
1449 / 1178 / 61
Регистрация: 21.04.2012
Сообщений: 2,466
Завершенные тесты: 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);
        }
    }
}
только он считывает весь файл в одну строку, а не так, как он хранится в файле. помогите.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 15:31     Как считать матрицу из файла в двумерный вектор
Еще ссылки по теме:
C++ Считать слова строк из файла в вектор векторов
C++ считать матрицу с файла
C++ Считать матрицу из файла
Считать матрицу из файла C++
C++ Считать текст из файла в двумерный массив

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6477 / 2252 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
12.11.2012, 15:31     Как считать матрицу из файла в двумерный вектор #15
Tiva, что тебе мешает читать построчно?
Yandex
Объявления
12.11.2012, 15:31     Как считать матрицу из файла в двумерный вектор
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru