Создание набора <char>в C ++ - PullRequest
       11

Создание набора <char>в C ++

3 голосов
/ 05 апреля 2011

Я кодирую эту вещь, и было бы полезно иметь static const set<char>, содержащий некоторые элементы, которые не изменятся.

class MyClass {
     private:
         static const set<char> mySet = ??  
}

Как я могу это сделать?Было бы неплохо, если бы вы могли создать их из строки, например mySet("ABC"), но я не могу заставить синтаксис работать.

Ответы [ 5 ]

8 голосов
/ 05 апреля 2011

Примерно так будет хорошо работать:

// my_class.h
class MyClass
{
  static const std::set<char> mySet;
};

// my_class.cpp
const char *tmp = "ABCDEFGHI";
const std::set<char> MyClass::mySet(tmp,tmp+strlen(tmp));
1 голос
/ 05 апреля 2011

Должно сработать что-то вроде следующего.

1 голос
/ 05 апреля 2011

Вы не можете инициализировать переменную внутри класса, потому что технически она еще не определена (только объявлена).

В классе сохраните static const set<char> mySet;.

Inреализация (т.е. файл .cpp):

const char[] _MyClassSetChars = "ABC";

// Define and initialize the set, using
// the constructor that takes a start and end iterator
const set<char> MyClass::mySet(
    _MyClassSetChars,
    _MyClassSetChars + sizeof(_MyClassSetChars) / sizeof(_MyClassSetChars[0])
);

Сюда также входит завершающий нулевой символ (\0) в наборе, что, вероятно, не то, что вы хотите - вместо этого используйте это:

const set<char> MyClass::mySet(
    _MyClassSetChars,
    _MyClassSetChars + (sizeof(_MyClassSetChars) / sizeof(_MyClassSetChars[0]) - 1)
);

Обратите внимание, что здесь вы можете использовать <cstring> s strlen() (согласно Let_Me_Be ответ ) вместо более общей формы выше:

const set<char> MyClass::mySet(
    _MyClassSetChars,
    _MyClassSetChars + strlen(_MyClassSetChars)
);

Также см. этот вопрос .

0 голосов
/ 05 апреля 2011
header file:
#include<set>
class MyClass {
private:
    static const std::set<char> mySet;
}

source file:
#include<boost/assign.hpp>
const MyClass::mySet = boost::assign::list_of('A')('B')('C');
0 голосов
/ 05 апреля 2011

Вы пробовали static set <const char> mySet;? Конечно, вам нужно сначала инициализировать его, в противном случае, если вы попытаетесь insert после того, как объявите свой set, произойдет сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...