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

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

Войти
Регистрация
Восстановить пароль
 
Ксю92
73 / 7 / 0
Регистрация: 29.03.2011
Сообщений: 94
#1

До выделение памяти в С++ - C++

09.06.2012, 17:41. Просмотров 432. Ответов 3
Метки нет (Все метки)

Всем приветик. Вообщем есть некоторые сложности с довыделение памяти...
Что я хочу сделать: есть 2-х мерный массив (он ещё и квадратный). Он считывается из файла.
Известно, что в массиве только нули и единички. Единичек произвольное количество. Мне надо получить координаты всех единичек. Надо через дин. массивы. Т.к. количество единичек в файле заранее не известно, то надо как то довыделять память, в процессе поиска. Как сделать довыделение памяти с помощью new - незнаю(((

т.е. есть массив, допустим такой:
0 0 0 0 1 0
0 1 0 1 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 1

тут координаты единичек [0, 4], [1, 1], [1, 3], [5, 5]
Как получить их мне в виде массива?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
тут всякий код
 
****
 
std::ifstream in(IN_DATA_FILE_NAME);
 
****
 
for(int i = 0; i < SIZE; i++, std::cout << std::endl) /** Записываем массив из файла */
  for(int j = 0; j < SIZE; j++)
  {
     in >> arr[i][j];
     std::cout << arr[i][j] << " ";
     if(arr[i][j] == 1) { /** тут надо довыделить память */ }
  }
 
****
 
тут пошёл дальше всякий код
Вроде можно это сделать с помощью STL (там есть штука vector), но как - не знаю...

Помогите плиз

Заранее спасибки!

Не по теме:

Если можно, но сделайте не через STL, а как нибудь по другому...



Добавлено через 3 минуты
И ещё небольшой вопросик: как в С++ называется такая штука :: (два двоеточия)
которая применяется, например так std::string hello_world;

Ещё раз спасибки!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2012, 17:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос До выделение памяти в С++ (C++):

Выделение памяти, проверка на утечку памяти - C++
Интересуют два вопроса: 1. Правильно ли устроен алгоритм выделения, удаление и запись ячейки памяти? Может быть, есть более простые...

Распределение памяти. Динамическое выделение памяти - C++
an-1 an-2 ... a2

Выделение памяти - C++
Нубский вопрос, но не могу до конца разобраться. Допустим, есть простое определение переменной: int ival = 1024; Когда и как...

Выделение памяти - C++
Вот кусок кода, класс и функция добавления в список Класс занимает 64 бита, я добавляю 10 элементов в список - 640 бит Потом отнимаю...

Выделение памяти - C++
Скажите пожалуйста что не так? Не могу получить доступ к элементу str = 12, stlb = 3 bool** tempValues = new(bool*); for(int i = 0;...

Выделение памяти... - C++
Вот решил себе ликбез устроить и возникли вопросы: 1) Почему char* p = &quot;fffff&quot;; не реагирует на delete p 2) Когда надо...

3
soft.creator
104 / 104 / 4
Регистрация: 17.10.2010
Сообщений: 283
09.06.2012, 17:46 #2
:: - это оператор разрешения области видимости (или разрешения области доступа)
Могу здесь ошибаться!

Что касается std::vector:
C++
1
2
3
4
5
6
std::vector<int> v; // так можно задать тип объекта внутри вектора
for (int i = 0; i < 100; i++)
   if (isGood(i))
      v.push_back(i); // так можно добавить элемент
for (size_t i = 0; i < v.size(); i++) // так узнать количество добавленных элементов
  std::cout << v[i] << std::endl; // а так обратиться к i-му элементу
А если без STL, я бы сделал односвязный список, а потом создал бы массив нужной длины и заполнил его из этого списка.

P.S. Ну или посчитать на первом проходе количество единичек, выделить память, а на втором проходе запомнить координаты. Но это самый плохой вариант.
1
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
09.06.2012, 17:56 #3
В файле между цифрами есть пробелы?

Добавлено через 2 минуты
И еще: двумерный массив надо считывать из файла в память, или только посчитать единицы?

Добавлено через 5 минут
В общем, примерно так:
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
#include <fstream>
#include <iostream>
#include <vector>
 
using namespace std;
 
int main() {
    vector< pair<int, int> > v;
    char c;
    int x = 0, y = 0;
    ifstream in("input.txt");
    while (in.get(c))
        if (c == '1')
            v.push_back(pair<int, int>(x, y));
        else if (c == ' ')
            x++;
        else if (c == '\n') {
            x = 0;
            y++;
        }
    in.close();
    for (x = 0; x < v.size(); x++)
        cout << v[x].first << "; " << v[x].second << endl;
}
1
Ксю92
73 / 7 / 0
Регистрация: 29.03.2011
Сообщений: 94
09.06.2012, 18:11  [ТС] #4
soft.creator, спасибо, но это (с вектором) немного не то(( мне надо координаты единичек, а это 2 числа (i и j-тая координата) а у вас массив одномерный...

Кот Ангенс, сорри что я задание не очень точно сформултровала
в двух словах задание такое: есть двумерный массив, состоящий из 0 и 1. и мне надо получить координаты всех единичек, чтобы в дальнейшем я могла с ними работать)

P.S. Насчет файла забейте, т.к. не важно, как этот массив заполняется (ручками ли он вводится, или из файла читается, все равно))

Добавлено через 29 секунд
сейчас погуглила, что такое std::pair, похоже, это именно то, что мне нужно))

P.S.S. soft.creator, спасибо за объяснение точек
0
09.06.2012, 18:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2012, 18:11
Привет! Вот еще темы с ответами:

Выделение памяти (new) - C++
Наткнулся на пример где делают непонятные мне выделения памяти с помощью new X* pi = new X; X* p2 = new X ; X* рЗ = new (&amp;buffer )...

выделение памяти - C++
есть класс множество. необходимо создать класс &quot;правило&quot;, одним из методов которого является добавление множества к соответствующему списку...

выделение памяти - C++
Здравствуйте, помогите пожалуйста исправить ошибку, это лишь малая часть кода. В задании: поле name должно быть динамическим: char...

Выделение памяти - C++
В чём ошибка выделения памяти? Подскажите, друзья! #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include &lt;iostream&gt; #include...


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

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

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