Выберите верный случай

Цвета могут быть сохранены в векторе динамически и затем доступны с помощью векторного итератора, который является более быстрым методом. Цикл для перебора векторов и еще один для создания 10 игроков на цвет будет достаточным для вашего требования. Пример вашего подхода доступен ниже, имя игрока может быть изменено в соответствии с вашими требованиями:

#include <iostream>
#include <string>
#include <vector>

class Player
{
public:
    Player(int id, std::string color, std::string name);
    void Display();
    int _id;
    std::string _color;
    std::string _name;
};

Player::Player(int id, std::string color, std::string name)
{
    _id = id;
    _color = color;
    _name = name;
}

void Player::Display()
{
    std::cout << _id << ' ' << _color << ' ' << _name << '\n';
}

int main(int argc, const char * argv[])
{
    std::vector<Player*> players;
    std::vector <std::string> colour;
    colour.push_back("Black");
    colour.push_back("Red");
    colour.push_back("Orange");
    colour.push_back("Yellow");
    colour.push_back("Blue");

    int id = 1;

    for(std::vector<std::string>::iterator it = colour.begin(); it != colour.end(); it++)
    {
        for(int i=0; i<10; i++)
        {
            std::string player = "player";
            std:: string name = player + std::to_string(id);
            Player* player1 = new Player(id, (*it), name);
            players.push_back(player1);
            player1->Display();
            id++;
        }
    }

    return 0;
}
18
задан Jean-François Corbett 30 March 2015 в 14:17
поделиться

5 ответов

Этот синтаксис часто используется вместо оператора If ... ElseIf . Некоторые люди находят это немного легче читать. Например:

Select Case True
    Case testVariable < 0
         Console.Write("You must supply a positive value.")
    Case testVariable > 10
         Console.Write("Please enter a number from 0-10.")
    Case True
         Call DoWork(testVariable)
End Select

Ответ: да, это все еще работает в VB.NET. Просто будьте осторожны при его использовании, потому что это не «стандартная программная конструкция» и может быть незнакомым людям, которым придется поддерживать ваш код в будущем.

29
ответ дан 30 November 2019 в 05:47
поделиться

Я не уверен, как эта конструкция дает какие-либо преимущества по сравнению со следующим:

If testVariable < 0 Then
     Console.Write("You must supply a positive value.")
ElseIf testVariable > 10 Then
     Console.Write("Please enter a number less than 10.")
Else
     Call DoWork(testVariable)
End If

Вышеупомянутая структура имеет короткое замыкание, и мне не нужно пытаться понять, что она делает как это стандартная конструкция.

13
ответ дан 30 November 2019 в 05:47
поделиться

Другие уже ответили на этот актуальный вопрос, но я просто хочу сказать, что я использую эту конструкцию довольно часто. Я думаю, что это часто самый читаемый способ одновременного тестирования двух логических условий:

Dim A As Boolean
Dim B As Boolean
'
'do stuff to set values of A and B
'
Select Case True
  Case A And B
    'something
  Case A And Not B
    'something else
  Case Not A And B
    'you get the picture
  Case Else
    '...
End Select

Я признаю, что часть того, почему я нахожу это легко читаемым, заключается в том, что я его использую, и что я вспоминаю, что мне пришлось анализировать его в первый раз, когда я увидел это - но однажды успешно проанализированный, моя реакция была «Это блестяще!»

11
ответ дан 30 November 2019 в 05:47
поделиться

Ты имеешь в виду что-то подобное?

 Select Case True
    Case 1 = 0
        Console.Write("1")
    Case 1 = 1
        Console.Write("2")
    Case 2 = 2
        Console.Write("3")
End Select

В котором программа напишет 2 ... если это то, что ты спрашиваешь, тогда да, это все еще существует в VB.NET

3
ответ дан 30 November 2019 в 05:47
поделиться

В этой теме много путаницы, но чтобы ответить на вопрос OP: Да, логическая оценка такая же в VB.Net, как и в VB6, и в VBA. http://support.microsoft.com/kb/817250

Чтобы воспользоваться преимуществами метода оптимизации Select Case, вы используете собственный синтаксис Select Cases, чтобы избежать использования логических операторов And, Or, Xor и т. Д. Именно эти операторы действительно имеют оценку короткого замыкания.

Рассмотрим следующий пример:

Public Sub Example()
    If A Or B Then
        Beep
    End If
    Select Case True
        Case A, B
            Beep
    End Select
End Sub

Private Function A() As Boolean
Debug.Print "A Ran"
    A = True
End Function

Private Function B() As Boolean
Debug.Print "B Ran"
    B = False
End Function

Версия Select Case будет запускать только A. Блок If-Block будет запускать оба. Это не ошибка оператора If, а ошибка оператора And. Если хочешь, вы можете структурировать оператор If для короткого замыкания следующим образом:

Public Sub Example2()
    If A Then
    ElseIf B Then
        Beep
    End If
End Sub

И B не будет работать. Все дело в стиле.

Важно знать, что вы избегаете операторов And / Or / Xor, а не If-блоков. Если вам больше нравится версия If-Block Select Case ... Больше возможностей для вас :)

9
ответ дан 30 November 2019 в 05:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: