2009-02-07 2 views
0

Я работаю над программой, которая «кодирует» файл на основе поставляемого книжного файла. В полученном файле каждая буква заменяется числом. Это число соответствует смещению появления букв в книжном файле. Поэтому, если бы у нас был «привет», он бы выбрал «h» из книжного файла, нашел его номер места и заменил его на выходе.Создание переменных/векторов на основе времени выполнения

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

Я не понимаю, как это сделать. Например, если я прочитал в «h», я хотел бы сохранить его как vector<int> hLocations;

Есть ли способ сделать это или я просто сумасшедший? Я думал о создании функции, которая делает это, но часть, которая меня смущает, - <int>Locations; Есть ли способ использовать переменные внутри кода C++? Я думаю, это то, что я действительно спрашиваю.

ответ

3

Вы можете использовать std::map<unsigned int, std::vector<unsigned int> >, так что представляющий интерес символ является ключом к вектору смещений. Таким образом, вам не нужно кодировать N разных векторов для каждого возможного символа в файле.

+0

Или вектор > будет работать так же хорошо, так как он будет содержать не более 256 записей. –

+0

Мне нравится карта, так как вам не нужно резервировать много места для любого возможного персонажа. Но карта более удобна в использовании, так как вам приходится иметь дело с парами поиска и итератора ... –

+0

Да, либо это сработает, это компромисс. Я считаю (256 - number_of_used_chars) * sizeof (пустой вектор) не является большим пространством, чтобы тратить на вас внимание. Второй фактор, вероятно, составляет 12 или 16 байт, что подразумевает 4Kb. –

0

Этот вопрос довольно старый, но то, что я спрашивал, было действительно «Имеет ли переменные переменные имена C++?»

PHP имеет это ...

$foo = 'bar'; 
$bar = 'foobar'; 
echo $$foo; //This outputs foobar 

Я искал что-то simliar в C++.

Смежные вопросы