Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Доброго времени суток, начал писать шифр Скитала И столкнулся с такой проблемой, но могу считать матриwe размером 4х4 в двумерный вектор из файла! подскажите как реализовать! Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2012, 14:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как считать матрицу из файла в двумерный вектор (C++):

ifstream (считать матрицу из файла в двумерный вектор) - C++
нужно из файла считать матрицу в двумерный вектор. файл выглядит так: 2 9 6 5 4 8 4 5 8 9 5 4 8 6 4 5 8 6 5 8 4 прошу помощи !

Как считать вектор из файла? - C++
как считать вектор из файла?

Считать вектор из файла, записать вектор в файл - C++
Доброго времени суток. Программа должна считывать числа из заданного файла, потом записывать в другой файл вектор, в котором каждый элемент...

Как считать матрицу из файла без указания размерности? - C++
Как считать матрицу из файла без указания размерности?

Как считать матрицу 3*3 из файла если он там задан неправильно - C++
как считать матрицу 3*3 из файла если он там задан неправильно например в файле 4 5 6 7 8 1 2 3 4 9 8 7 а должно считать 4 5...

Как считать из файла текст в двумерный массив типа char и отсортировать в алф. порядке? - C++
Постановка задачи: Исходные данные считать из текстового файла через отдельную функцию. Дана строка символов, состоящая из...

19
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
27.10.2012, 14:31 #2
Как задаете двумерный вектор в программе и как матрица выглядит в файле?
0
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
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());
    }
1
2008kedr2008
3 / 3 / 0
Регистрация: 16.11.2010
Сообщений: 165
27.10.2012, 15:18  [ТС] #4
Спасибо, разобрался! Помогли!
0
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 можно заменять?
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
09.11.2012, 17:15 #6
C++
1
#include <algorithm>
сделали?
если не помогло, то у вас нет такого стандартного метода
0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
09.11.2012, 17:16 #7
алгоритм инклюдил, все равно.
0
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
09.11.2012, 17:20 #8
Цитата Сообщение от Tiva Посмотреть сообщение
его на просто copy можно заменять?
copy не принимает кол-во элементов. Поэтому в данном примере - нет, будет ошибка компиляции.
0
Tiva
94 / 94 / 1
Регистрация: 25.04.2012
Сообщений: 429
09.11.2012, 21:30 #9
Цитата Сообщение от Vourhey Посмотреть сообщение
copy не принимает кол-во элементов. Поэтому в данном примере - нет, будет ошибка компиляции.
как тогда быть?
0
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
09.11.2012, 21:31 #10
Цитата Сообщение от Tiva Посмотреть сообщение
как тогда быть?
Писать другой код.
0
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)<<" "; 
        }
}
по аналогу с добавлением\удалением сделал, но не принимает вижуалка...
0
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
09.11.2012, 21:42 #12

Не по теме:

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



Добавлено через 2 минуты
Tiva, и вообще, как вывести матрицу в аутпутстрим я уже писал в другой теме тебе же. Хватит здесь оффтопить.
0
gray_fox
What a waste!
1551 / 1256 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 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];
   }
}
1
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);
        }
    }
}
только он считывает весь файл в одну строку, а не так, как он хранится в файле. помогите.
0
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
12.11.2012, 15:31 #15
Tiva, что тебе мешает читать построчно?
0
12.11.2012, 15:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2012, 15:31
Привет! Вот еще темы с ответами:

Считать посимфольно из файла в char вектор - C++
Например в файле записаны: aaaaaaa bbbbbbb надо считать первую строчку в вектор char посимвольно, потом происходит сравнение с другим...

Считать слова строк из файла в вектор векторов - C++
допустим есть вектор векторов vector&lt;vector&lt;string&gt;&gt; V1 ; как считать из файла слова, записанные в строку, так чтобы каждое слово было...

Считать матрицу из файла - C++
Как считать размерность матрицы и затем саму матрицу из файла? Добавлено через 52 минуты 53 секунды HELP!!!!!!!!!!!!!!!!!:help:

Считать матрицу из файла - C++
код на си вроде,сколько смотрела по форумам, код правильный грешу на ввод размерности с клавиатуры выводит матрицу заполненную нулями...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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