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

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

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

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

24.05.2014, 21:05. Просмотров 1135. Ответов 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'а создать двумерный массив - C++
Доброго времени суток. Собственно, вопрос заключен в самой теме. Возможно ли создать двумерный массив с помощью класса vector? И если да,...

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

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

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

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

Реализовать шаблон класса vector, реализующий динамический массив - C++
Реализовать шаблон класса vector, реализующий динамический массив. Определить 2 объекта класса vector и внешнюю функцию, выполняющую...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7152 / 5329 / 278
Регистрация: 10.12.2010
Сообщений: 23,584
Записей в блоге: 17
24.05.2014, 21:14 #2
Цитата Сообщение от Вероника99 Посмотреть сообщение
один двумерный массив скопировать в другой?С помощью copy() не получается
И не получится copy() для "одномерных" контейнеров.
Копируй в цикле построчно
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 425
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());
}
nmcf
5310 / 4630 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
24.05.2014, 22:00 #4
А как у тебя двухмерность-то реализована? Оба индекса же должны быть задействованы matrix[i * n + j].
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 425
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-означает номер строки и таким образом,мы копируем во второй массив сначала первый вектор,потом второй и т.д. Или я что-то не так понимаю???*/
                 }
...
Jewbacabra
Эксперт PHP
2415 / 2011 / 761
Регистрация: 24.04.2014
Сообщений: 5,893
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.
Вероника99
4 / 4 / 1
Регистрация: 16.12.2013
Сообщений: 425
25.05.2014, 17:55  [ТС] #7
Jewbacabra ,спасибо,работает.Я про такую функцию еще не слышала
Jewbacabra
Эксперт PHP
2415 / 2011 / 761
Регистрация: 24.04.2014
Сообщений: 5,893
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]), который сам выделит память, если надо.
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
25.05.2014, 18:13 #9
Цитата Сообщение от Вероника99 Посмотреть сообщение
vector<int>matrix[n];
если уж на основе вектора, то..
vector<vector<int> > v(x, vector<int>(y)); // x - размерность главного вектора, заполняемого объектами vetor<int> размерности y
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2014, 18:13
Привет! Вот еще темы с ответами:

Скопировать двумерный массив в vector - C++
Добрый день всем. подскажите пожалуйста, как скопировать двумерный массив в vector? int i = {0}; vector&lt;vector&lt;int&gt; &gt; _v; _v = i;...

Из контейнера (напр access-овая форма) передать в ActiveX control двумерный массив - C++
Как реализовать сабж? А то в MSDN-е что-то так закручено -пока не врубиться никак... Цель: из контейнера (напр access-овая форма)...

Как с помощью <vector> сделать двумерный массив? - C++
как с помощью &lt;vector&gt; сделать двумерный массив?

Двумерный массив vector, одна размерность известна заранее - C++
Привет всем. Нужно создать двумерный массив vector, одна из его размерностей известна заранее, другая - нет. Делаю так: double...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.05.2014, 18:13
Ответ Создать тему
Опции темы

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