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

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

Войти
Регистрация
Восстановить пароль
 
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 425
#1

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

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

Каким образом можно один двумерный массив скопировать в другой?С помощью 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;
        
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2014, 21:05     На основе контейнера vector построить двумерный динамический массив
Посмотрите здесь:
C++ Можно ли на основе vector'а создать двумерный массив
Создать стек на основе контейнера vector C++
Собственный динамический массив (аналог std::vector) C++
C++ Реализовать шаблон класса vector, реализующий динамический массив
Скопировать двумерный массив в vector C++
C++ Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив
Как с помощью <vector> сделать двумерный массив? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,387
Записей в блоге: 17
24.05.2014, 21:14     На основе контейнера vector построить двумерный динамический массив #2
Цитата Сообщение от Вероника99 Посмотреть сообщение
один двумерный массив скопировать в другой?С помощью copy() не получается
И не получится copy() для "одномерных" контейнеров.
Копируй в цикле построчно
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 425
24.05.2014, 21:30  [ТС]     На основе контейнера vector построить двумерный динамический массив #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());
}
nmcf
5247 / 4567 / 1534
Регистрация: 14.04.2014
Сообщений: 18,161
24.05.2014, 22:00     На основе контейнера vector построить двумерный динамический массив #4
А как у тебя двухмерность-то реализована? Оба индекса же должны быть задействованы matrix[i * n + j].
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 425
25.05.2014, 17:21  [ТС]     На основе контейнера vector построить двумерный динамический массив #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-означает номер строки и таким образом,мы копируем во второй массив сначала первый вектор,потом второй и т.д. Или я что-то не так понимаю???*/
                 }
...
Jewbacabra
Эксперт PHP
2260 / 1924 / 720
Регистрация: 24.04.2014
Сообщений: 5,591
25.05.2014, 17:40     На основе контейнера vector построить двумерный динамический массив #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.
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 425
25.05.2014, 17:55  [ТС]     На основе контейнера vector построить двумерный динамический массив #7
Jewbacabra ,спасибо,работает.Я про такую функцию еще не слышала
Jewbacabra
Эксперт PHP
2260 / 1924 / 720
Регистрация: 24.04.2014
Сообщений: 5,591
25.05.2014, 18:01     На основе контейнера vector построить двумерный динамический массив #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]), который сам выделит память, если надо.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2014, 18:13     На основе контейнера vector построить двумерный динамический массив
Еще ссылки по теме:
C++ Двумерный Динамический массив
Двумерный динамический массив C++
C++ Двумерный динамический массив
C++ Двумерный динамический массив
C++ Двумерный динамический массив

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,996
25.05.2014, 18:13     На основе контейнера vector построить двумерный динамический массив #9
Цитата Сообщение от Вероника99 Посмотреть сообщение
vector<int>matrix[n];
если уж на основе вектора, то..
vector<vector<int> > v(x, vector<int>(y)); // x - размерность главного вектора, заполняемого объектами vetor<int> размерности y
Yandex
Объявления
25.05.2014, 18:13     На основе контейнера vector построить двумерный динамический массив
Ответ Создать тему
Опции темы

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