Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
1

На основе контейнера vector построить двумерный динамический массив

24.05.2014, 21:05. Показов 4942. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Каким образом можно один двумерный массив скопировать в другой?С помощью copy() не получается
На основе контейнера vector построить двумерный динамический массив целых чисел. Выполнить операции ввода элементов в массив, создания копии массива по строкам, создания копии массива по столбцам, копирование выбранной строки или столбца, вывод массива на экран.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// stl_mtx.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <cstdlib>
#include <iomanip>
#include <algorithm>
#include <functional>
#include <fstream>
#include <locale.h>
#include <iterator>
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL,"Rus");
    vector <int> v;
    vector <int>::iterator p;
    int x;
 
    const int n=3;
    int m=4;
 
    vector<int>matrix[n];
    
    ifstream ifile;         
    char fname[30]="D:\\z.txt";
    ifile.open(fname);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            ifile>>x;
             matrix[i].push_back(x);
 
        }
    }
    
    ifile.close();  
        for(int i=0;i<n;i++)
        {
            for(p=matrix[i].begin();p!=matrix[i].end();p++)
                cout<<" "<<*p;
            cout<<endl;
        }
/*vector<int>t[n]; //Здесь создаю новый двумерный массив
for(int i=0;i<n;i++)
        {
            for(p=matrix[i].begin();p!=matrix[i].end();p++)
 
            t[i].push_back(*p);//и хочу скопировать элементы первого массива во второй массив,как это сделать?
 
    }
    */
    //copy(matrix[0].begin(),matrix[10].end(),t.begin());
    copy(t.begin(),t.end(),ostream_iterator<int>(cout," "));
        
            cout<<"jhh"<<endl;
        
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2014, 21:05
Ответы с готовыми решениями:

Можно ли на основе vector'а создать двумерный массив
Доброго времени суток. Собственно, вопрос заключен в самой теме. Возможно ли создать двумерный...

Создать стек на основе контейнера vector
На основе контейнера vector построить стек целых чисел. Выполнить операции занесения элемента в...

Объявление матрицы на основе контейнера vector
Здрасте. Не могли бы вы помочь расшифровать строку - vector&lt;vector&lt;int&gt; graf(num,...

На основе контейнера list построить благоустроенный стек
На основе контейнера list построить благоустроенный стек. Выполнить операции занесения элемента в...

8
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.05.2014, 21:14 2
Цитата Сообщение от Вероника99 Посмотреть сообщение
один двумерный массив скопировать в другой?С помощью copy() не получается
И не получится copy() для "одномерных" контейнеров.
Копируй в цикле построчно
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
24.05.2014, 21:30  [ТС] 3
Если i-для строк,j-для стобцов
C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
    
            {
                t[i].push_back(matrix[i][j].begin()); //begin()-возвращает значение итератора, а в push_back передается обычная переменная. Так как поступить??
    
            }
    }
Добавлено через 6 минут
Здесь я пыталась сделать построчное копирование,но оно не работает
C++
1
2
3
4
for(int i=0;i<n;i++)
{
copy(matrix[i].begin(),matrix[i].end(),t[i].begin());
}
0
7795 / 6561 / 2985
Регистрация: 14.04.2014
Сообщений: 28,683
24.05.2014, 22:00 4
А как у тебя двухмерность-то реализована? Оба индекса же должны быть задействованы matrix[i * n + j].
0
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
25.05.2014, 17:21  [ТС] 5
Был такой вариант,но компилятор выдает ошибку,что слева от бегин должен быть класс,структура
C++
1
2
3
4
5
for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
t[i].push_back(matrix[i][j].begin());
}
Добавлено через 18 часов 56 минут
Я не понимаю,почему оно не работает.Если разглядывать двумерный массив,как например 3 строки одномерных массив(векторов),то к этим одномерным массивам можно применять функцию copy().Исходя из этого я делаю цикл:
C++
1
2
3
4
5
6
7
8
9
10
11
...
vector<int>matrix[n];
...
vector<int>t[n];
...
for(int i=0;i<n;i++)
        {
                   copy(matrix[i].begin(),matrix[i].end(),t[i].begin());
/*т.е здесь i-означает номер строки и таким образом,мы копируем во второй массив сначала первый вектор,потом второй и т.д. Или я что-то не так понимаю???*/
                 }
...
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.05.2014, 17:40 6
Вероника99, а размер вектора t[i] задан? Если vector t[i] пустой, то поможет back insert iterator
C++
1
copy(matrix[i].begin(),matrix[i].end(),back_inserter(t[i]));
back_insert объявлен в заголовочном файле iterator.
1
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 463
25.05.2014, 17:55  [ТС] 7
Jewbacabra ,спасибо,работает.Я про такую функцию еще не слышала
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
25.05.2014, 18:01 8
Вероника99, тут получается такая ситуация, что при вызове
C++
1
copy(matrix[i].begin(),matrix[i].end(),t[i].begin());
происходит что-то на подобии: t[i][j] = matrix[i][j], но память для t[i][j] не выделена. А back_inserter вернет такой итератор, который при попытке записать в него значение будет вызывать метод push_back(matrix[i][j]), который сам выделит память, если надо.
0
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
25.05.2014, 18:13 9
Цитата Сообщение от Вероника99 Посмотреть сообщение
vector<int>matrix[n];
если уж на основе вектора, то..
vector<vector<int> > v(x, vector<int>(y)); // x - размерность главного вектора, заполняемого объектами vetor<int> размерности y
0
25.05.2014, 18:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2014, 18:13
Помогаю со студенческими работами здесь

Записать числа из файла в двумерный массив или вектор вроде такого vector<vector<int>>
Добрый день, подскажите пожалуйста как лучше и проще считывать файл. в файле записаны числа,...

На основе контейнера stack построить стек с информацией об успешности студентов
На основе контейнера stack построить стек с информацией об успешности студентов (фамилия,...

Vector как динамический массив
Здравствуйте. Не могу понять, как сделать с помощью контейнера vector, динамический массив. Заранее...

Собственный динамический массив (аналог std::vector)
Вот возникла идея написать что-то на подобии вектора, но возникла проблема что не так с kallocSize?...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru