Использование stringstream вместо строки? - C ++ - PullRequest
1 голос
/ 01 июня 2009

Мне дали домашнее задание, чтобы написать программу на C ++, но мы не можем использовать строковый класс. Однако нам разрешено использовать библиотеку iostream , включая stringstream. Я думал об использовании stringstream, где я использовал бы строку для построения своих классов, возврата из функций и т. Д.

Это звучит как хорошая идея для вас? Любые подводные камни, о которых я должен знать?

Ответы [ 2 ]

10 голосов
/ 01 июня 2009

Вы также можете использовать вектор . Это хорошая альтернатива струне. Как говорит Скотт Мейерс в своей книге «Эффективный STL»:

В-третьих, рассмотрите возможность использования вектора вместо строки вектор реализации не могут быть ссылка подсчитана, поэтому скрыта проблемы с многопоточностью возникать. Конечно, ты отказался необычные функции-члены строки, если вы переключиться на вектор , но большинство эта функциональность доступна через алгоритмы STL в любом случае, так ты не так уж много сдаёшься функциональность, как вы торгуете синтаксис для другого.

Я думаю, что основные проблемы, которые могут возникнуть при использовании stringstream, заключаются в том, что он не является строго контейнером. Я не уверен, возможно ли использовать алгоритмы и другие обычные STL-вещи с потоками.

0 голосов
/ 19 августа 2009

Если ситуация представляет собой базу данных магазина без строк, вы можете просто использовать enum.

enum {
     Prod1,
     Prod2,
     Prod3
};

Это означает, что вы можете просто передавать целые числа в качестве идентификаторов, а затем просто иметь функцию печати с оператором switch.

void PrintProd(int product) {
    switch(product) {
         case Prod1: 
              cout << "Product 1" << endl;
              break;
         case Prod2:
              cout << "Product 2" << endl;
              break;
     // etc.
     }
}

Это позволяет обойти много неприятностей. Если вы не против иметь дело с кучей, вектор char *, распределяющий названия продуктов с идентификатором, который является индексом в векторе, также будет работать.

...