В одной кавычки строка не содержит переменных внутри нее. Строка с двойными кавычками.
Кроме того, строка с двумя кавычками может содержать апострофы без обратных косых черт, в то время как строка с одним кавычком может содержать неэкранированные кавычки.
Одиночный кавычек строки во время выполнения быстрее, потому что их не нужно анализировать.
Эффективность получения точки вставки не будет иметь никакого значения - это будет затмевать неэффективность постоянного перетасовки существующих данных каждый раз, когда вы вставляете.
Использовать std :: deque для этого, для чего он предназначен.
Когда вы используете вектор, вы обычно знаете фактическое количество элементов, которое оно будет иметь. В этом случае резервирование необходимого количества элементов (100000 в том случае, если вы показываете) и их заполнение с помощью оператора []
является самым быстрым способом. Если вам действительно нужна эффективная вставка спереди, вы можете использовать deque
или list
в зависимости от ваших алгоритмов.
Вы также можете рассмотреть возможность инвертирования логики вашего алгоритма и вставки в конце, что обычно быстрее для векторов.
Старый поток, но он появился на столе сотрудника в качестве первого результата поиска для запроса Google.
Существует одна альтернатива использованию дека, который стоит рассмотреть:
std::vector<T> foo;
for (int i = 0; i < 100000; ++i)
foo.push_back(T());
std::reverse( foo.begin(), foo.end() );
Вы по-прежнему используете вектор, который значительно более развит, чем deque для производительности. Кроме того, свопы (которые используются в обратном порядке) довольно эффективны. С другой стороны, сложность, хотя и линейная, увеличивается на 50%.
Как всегда, измерьте, прежде чем решать, что делать.
Я думаю, вы должны изменить тип своего контейнера, если вы действительно хотите вставить данные в начале. Именно поэтому вектор не имеет функции-члена push_front ().
Скорее всего, deque
является подходящим решением, как это было предложено другими. Но только для полноты, предположим, что вам нужно сделать эту переднюю вставку только один раз, что в другом месте программы вам не нужно делать другие операции спереди, а в противном случае vector
предоставляет необходимый вам интерфейс. Если все они верны, вы можете добавить элементы с очень эффективным push_back
, а затем reverse
вектором, чтобы все было в порядке. Это будет иметь линейную сложность, а не полиномиальную, как при вставлении спереди.
Если одна из критических потребностей вашей программы состоит в том, чтобы вставлять элементы в начале контейнера: тогда вы должны использовать std::deque
, а не std::vector
. std::vector
хорош только при вставке элементов в конец.
[/g0]
В C ++ 11 были введены другие контейнеры. Я должен начать поиск обновленного графика с этими новыми контейнерами и вставить его здесь.
Если вы ищете эффективный способ вычисления в фронте, вы, вероятно, захотите использовать deque вместо вектора.