Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
mixon-21
3 / 3 / 3
Регистрация: 05.03.2013
Сообщений: 220
1

Можно ли переделать маcсив под вектор?

22.09.2013, 10:46. Просмотров 1034. Ответов 24
Метки нет (Все метки)

Можно ли переделать масив под вектор. Если можно то как подскажите плиз.



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
{
    setlocale(LC_ALL, "rus");
    for (int i = 0; i < 13; i++)
        for (int j = 0; j < 4; j++)
        {
            rank[i] = rand() % 12;
            rank[0] = "2";
            rank[1] = "3";
            rank[2] = "4";
            rank[3] = "5";
            rank[4] = "6";
            rank[5] = "7";
            rank[6] = "8";
            rank[7] = "9";
            rank[8] = "10";
            rank[9] = "Валет";
            rank[10] = "Дама";
            rank[11] = "Король";
            rank[12] = "Туз";
            suit[0] = 6;
            suit[1] = 3;
            suit[2] = 4;
            suit[3] = 5;
            cout << rank[i] << ' ' ;
            cout << suit[j] << ' '<<"\n\n";
        }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 10:46
Ответы с готовыми решениями:

Переделать код через вектор
Нужно сделать код не через строки, а через вектор #include &lt;iostream&gt;...

Можно ли в вектор добавить вектор?
не сложить, а добавить? например, даны такие векторы: std::vector&lt;glm::vec2&gt;...

Вектор vector<string> переделать в int
Здравствуйте. Подскажите, а то что то совсем запутался Задача следующая...

Маcсив: Не используя других массивов, переставить его элементы в обратном порядке.
Дан массив X целых чисел. Не используя других массивов, переставить его...

Переделать под C#/C++
Здравствуйте, нашел в интернете нужную мне задачу, но она на языке, которого я...

24
Praktolock
71 / 71 / 18
Регистрация: 29.11.2011
Сообщений: 345
22.09.2013, 11:00 2
А что этот код должен делать, если не секрет?
0
castaway
Эксперт С++
4932 / 3038 / 454
Регистрация: 10.11.2010
Сообщений: 11,117
Записей в блоге: 10
Завершенные тесты: 1
22.09.2013, 11:00 3
C++
1
2
    const char *                r[] = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "Валет", "Дама", "Король", "Туз" };
    std::vector <std::string>   rank( r, r + sizeof( r ) / sizeof( r[0] ) );
Остальное по-аналогии.
1
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.09.2013, 11:10 4
mixon-21, если в том же стиле, то использовать std::vector<std::string> и push_back()
castaway, если компилятор поддерживает, то можно сразу через std::initializer_list
0
castaway
Эксперт С++
4932 / 3038 / 454
Регистрация: 10.11.2010
Сообщений: 11,117
Записей в блоге: 10
Завершенные тесты: 1
22.09.2013, 11:18 5
Tulosba, в таких постах я специально стараюсь не касаться стандарта С++11, т.к. у многих новичков с ним возникают проблемы.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.09.2013, 11:26 6
Цитата Сообщение от castaway Посмотреть сообщение
Tulosba, в таких постах я специально стараюсь не касаться стандарта С++11, т.к. у многих новичков с ним возникают проблемы.
Думал уточнить, в каких "таких". А потом присмотрелся к циклу ТС... OMG. Тут надо логику привести в порядок, прежде чем на вектор переходить
0
mixon-21
3 / 3 / 3
Регистрация: 05.03.2013
Сообщений: 220
22.09.2013, 11:57  [ТС] 7
Цитата Сообщение от castaway Посмотреть сообщение
1
2
* * const char ** * * * * * * * r[] = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "Валет", "Дама", "Король", "Туз" };
* * std::vector <std::string> * rank( r, r + sizeof( r ) / sizeof( r[0] ) );
Остальное по-аналогии.

по аналогии неполучается . Вектор должен быть двухмерный чтобы выводило карту и масть. как его сделать двух мерным

Добавлено через 1 минуту
Цитата Сообщение от Tulosba Посмотреть сообщение
mixon-21, если в том же стиле, то использовать std::vector<std::string> и push_back()
castaway, если компилятор поддерживает, то можно сразу через std::initializer_list

0
castaway
Эксперт С++
4932 / 3038 / 454
Регистрация: 10.11.2010
Сообщений: 11,117
Записей в блоге: 10
Завершенные тесты: 1
22.09.2013, 12:24 8
Цитата Сообщение от mixon-21 Посмотреть сообщение
по аналогии неполучается
Дай нам знать, когда сочтешь нужным показать как ты пробовал.
0
zer0mail
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,571
Записей в блоге: 1
22.09.2013, 12:25 9
Цитата Сообщение от mixon-21 Посмотреть сообщение
по аналогии неполучается . Вектор должен быть двухмерный чтобы выводило карту и масть. как его сделать двух мерным
В первом посте "хочу вектор" и только в 7-м "вектор должен быть двух мерным"
Стрельбой по бегущей мишени заниматься неинтересно (мало ли что всплывет в 15-й, 25 постах...)
1
mixon-21
3 / 3 / 3
Регистрация: 05.03.2013
Сообщений: 220
22.09.2013, 12:45  [ТС] 10
Цитата Сообщение от zer0mail Посмотреть сообщение
В первом посте "хочу вектор" и только в 7-м "вектор должен быть двух мерным"
Стрельбой по бегущей мишени заниматься неинтересно (мало ли что всплывет в 15-й, 25 постах...)
в первом посте масив двумерный а вектор будет одномерным????
0
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,585
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 12:52 11
Цитата Сообщение от mixon-21 Посмотреть сообщение
в первом посте масив двумерный а вектор будет одномерным?
Где он двумерный?

Добавлено через 1 минуту
Цитата Сообщение от mixon-21 Посмотреть сообщение
rank[i] = rand() % 12;
здесь его элементу присваивается int
Цитата Сообщение от mixon-21 Посмотреть сообщение
rank[0] = "2";
здесь присваивается char*

Вообще какой-то странный массив не понятно чего.
Цикл вообще черт пойми зачем, покуда и куда
1
lipnev
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
22.09.2013, 16:27 12
Объявить двумерный вектор не проблема
C++
1
std::vector<std::vector <std::string> > CardDeck;
Главная проблема в том, что ты хочешь получить в результате. Если ты хочешь, чтобы у тебя в двумерном векторе записывались и масть и название карты, то тебе нужно привести всё к одному типу. Либо массив будет строкового (string или char * например), либо целочисленного int. Если же хочешь, чтоб у тебя масть и цена карты были разные типы, то тебе нужна структура. Например:
C++
1
2
3
4
5
struct card
{
std::string rank;
int suit;
};
В этом случае будет достаточно одномерного вектора.
C++
1
std::vector<card> deck
1
mixon-21
3 / 3 / 3
Регистрация: 05.03.2013
Сообщений: 220
22.09.2013, 18:41  [ТС] 13
тип у меня один что suit что rank = string

подскажите правильно создал вектор

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
Card::Card()
{
    setlocale(LC_ALL, "rus");
    std::vector<card> card;
    for (int i = 0; i < 13; i++)
    {
        for (int j = 0; j < 4; j++)
        {
            rank[0] = "2";
            rank[1] = "3";
            rank[2] = "4";
            rank[3] = "5";
            rank[4] = "6";
            rank[5] = "7";
            rank[6] = "8";
            rank[7] = "9";
            rank[8] = "10";
            rank[9] = "Валет";
            rank[10] = "Дама";
            rank[11] = "Король";
            rank[12] = "Туз";
            suit[0] = 6;
            suit[1] = 3;
            suit[2] = 4;
            suit[3] = 5;
 
            cout << rank[i]<<suit[j] << endl;
    }
}
}
0
lipnev
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
22.09.2013, 23:24 14
mixon-21, честно говоря, не вижу, что rank и suit одного типа. rank присваиваются строки, а suit числа. В любом случае, вектор ты создал неправильно. В скобках <...> указывается тип данных, а после них имя переменной. vector - это не тип данных, как int, float или char. vector - это шаблон, для которого ты можешь указывать любой тип данных. Так вот ты обозначаешь и тип данных и имя переменной одним идентификатором. Скорей всего компилятор на это обругается. Правильно это будет сделать так. Объявляешь структуру
C++
1
2
3
4
5
struct CardStruc
{
  string rank;
  int suit;
};
Объявляешь vector
C++
1
vector<CardStruc> card;
Для того, чтобы добавить элемент в конец вектора используй метод push_back, если вставить куда-нибудь в середину - insert. Обращение к элементам вектора также как и в обычном массиве, т. е. по индексу в квадратных скобках. Вот пример добавления карты
C++
1
2
CardStruc temp={"туз", 5};
card.push_back(temp);
А вот так, например ты можешь узнать цену карты:
C++
1
card[0].rank;
Надеюсь стало понятней.
1
mixon-21
3 / 3 / 3
Регистрация: 05.03.2013
Сообщений: 220
22.09.2013, 23:33  [ТС] 15
В принцыпе да но как мне создать целую колоду карт из 52 штук????
0
lipnev
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
23.09.2013, 00:29 16
mixon-21, например, для одномерного вектора это будет так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    vector<CardStruc> card;
    string rank;
    int suit;
    for (int i=0; i<52; i++){
        CardStruc temp={rank, suit};
Есть другой вариант:
[CPP]    vector<CardStruc> card(52);
    string rank;
    int suit;
    for (int i=0; i<52; i++){
        CardStruc temp={rank, suit};
        card[i]=temp;
    }
card.push_back(temp);
}[/CPP]
В rank читаешь значения либо из своего массива rank[], либо можешь в какой-нибудь текстовый файл загнать. Также и со suit.
Можно, кстати, организовать и двухмерный вектор, но это будет несколько сложнее
1
Croessmah
++Ͻ
14630 / 8379 / 1582
Регистрация: 27.09.2012
Сообщений: 20,585
Записей в блоге: 2
Завершенные тесты: 1
23.09.2013, 00:42 17
Цитата Сообщение от mixon-21 Посмотреть сообщение
целую колоду карт из 52 штук?
угрюмый пример:
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
 
 
class Card {
public:
   enum SUITS {
      spades , //Пики
      hearts , //Червы
      clubs , //Трефы
      diamonds , //Бубны
   } ;
 
   enum NOMINALS {
      two = 2 , // 2
      threee ,
      four ,
      five ,
      six ,
      seven ,
      eight ,
      nine ,
      ten , //10
      jack , //Валет
      queen , //Дама
      king , //Король
      ace , //Туз
   } ;
   SUITS suit ( ) {
      return mSuit ;
   }
   NOMINALS nominal ( ) {
      return mNominal ;
   }
   Card ( SUITS argSuit , NOMINALS argNominal ) : mSuit ( argSuit ) , mNominal ( argNominal ) {
   }
   std::string to_string ( ) {
      //the NOMINAL of SUIT
      static const std::string suit_names[] = { "spades" , "hearts" , "clubs" , "diamonds" } ;
      static const std::string nominal_names[] = { "none" , "none" , "two" , "three" , "four" , "five" , "six" , "seven" , "eight" , "nine" , "ten" , "jack" , "quin" , "king" , "ace" } ;
      return "the " + nominal_names [ mNominal ] + " of " + suit_names [ mSuit ];
   }
private:
   SUITS mSuit ;
   NOMINALS mNominal ;
} ;
 
 
class CardDeck {
   std :: vector < Card > deck ;
public:
   CardDeck ( ) {
      recreate ( ) ;
   }
   void recreate ( ) {
      deck.clear ( ) ;
      for ( int i = Card::SUITS::spades ; i <= Card::SUITS::diamonds ; ++i ) {
         for ( int j = Card::NOMINALS::two ; j <= Card::NOMINALS::ace ; ++j )
            deck.push_back ( Card ( Card::SUITS ( i ) , Card::NOMINALS ( j ) ) ) ;
      }
   }
   void shuffle ( ) {
      std :: random_shuffle ( deck.begin ( ) , deck.end ( ) ) ;
   }
   Card operator[] ( size_t index ) const {
      return deck [ index ] ;
   }
   size_t count ( ) {
      return deck.size ( ) ;
   }
} ;
 
 
int main(){
   CardDeck deck ;
   for ( size_t i = 0 ; i < deck.count ( ) ; ++i )
      std :: cout << deck [ i ].to_string ( ) << std :: endl ;
   std::cout << "\n\nafter suffle:\n" ;
   deck.shuffle ( ) ;
   for ( size_t i = 0 ; i < deck.count ( ) ; ++i )
      std :: cout << deck [ i ].to_string ( ) << std :: endl ;
}
1
lipnev
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
23.09.2013, 09:06 18
Что-то у меня второй вариант вставился внутрь первого (немудрено ночью ).
Первый вариант:
C++
1
2
3
4
5
6
7
vector<CardStruc> card;
    string rank;
    int suit;
    for (int i=0; i<52; i++){
        CardStruc temp={rank, suit};
        card.push_back(temp);
    }
Второй вариант:
C++
1
2
3
4
5
6
7
vector<CardStruc> card(52);
    string rank;
    int suit;
    for (int i=0; i<52; i++){
        CardStruc temp={rank, suit};
        card[i]=temp;
    }
Добавлено через 25 минут
Вот вариант с двумерным вектором:
C++
1
2
3
4
5
6
7
8
9
10
vector< vector<CardStruc> > card(4);
    string rank;
    int suit;
    for (int i=0; i<4; i++){
        card[i].resize(13);
        for (int j=0; j<13; j++){
            CardStruc temp={rank, suit};
            card[i][j]=temp;
        }
    }
1
mixon-21
3 / 3 / 3
Регистрация: 05.03.2013
Сообщений: 220
23.09.2013, 09:38  [ТС] 19
только почему suit int я его создал как string что-бы выводил на экран значок масти и был тогоже типа что и rank.

Всем Огромное спасибо
0
lipnev
60 / 60 / 7
Регистрация: 14.09.2013
Сообщений: 145
23.09.2013, 09:59 20
mixon-21, не принципиально. хочешь string - пожалуйста. В конечном итоге программа всё-таки твоя. Но тогда уж лучше, наверное, char, чтоб меньше памяти занимал. string - это целый класс со переменными и методами. Я думаю, что использовать его ради одного символа целый string нецелесообразно.
0
23.09.2013, 09:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2013, 09:59

Переделать под с++
есть программа, я так понял написана на с, а мне надо на с++ сам я пробовал, но...

Переделать под реккурсию
Есть задача,поиск числа бинарным методом, в нее нужно добавить решение с...

переделать под график
это сделано под сетевую диаграмму


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

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

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