Цвета могут быть сохранены в векторе динамически и затем доступны с помощью векторного итератора, который является более быстрым методом. Цикл для перебора векторов и еще один для создания 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;
}
Этот синтаксис часто используется вместо оператора 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. Просто будьте осторожны при его использовании, потому что это не «стандартная программная конструкция» и может быть незнакомым людям, которым придется поддерживать ваш код в будущем.
Я не уверен, как эта конструкция дает какие-либо преимущества по сравнению со следующим:
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
Вышеупомянутая структура имеет короткое замыкание, и мне не нужно пытаться понять, что она делает как это стандартная конструкция.
Другие уже ответили на этот актуальный вопрос, но я просто хочу сказать, что я использую эту конструкцию довольно часто. Я думаю, что это часто самый читаемый способ одновременного тестирования двух логических условий:
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
Я признаю, что часть того, почему я нахожу это легко читаемым, заключается в том, что я его использую, и что я вспоминаю, что мне пришлось анализировать его в первый раз, когда я увидел это - но однажды успешно проанализированный, моя реакция была «Это блестяще!»
Ты имеешь в виду что-то подобное?
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
В этой теме много путаницы, но чтобы ответить на вопрос 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 ... Больше возможностей для вас :)