Если вы уже имеют начальные данные, скажем, в массиве стилей C, не забывайте, что эти контейнеры STL имеют «конструкторы 2-итератора».
const char raw_data[100] = { ... };
std::vector<char> v(raw_data, raw_data + 100);
Edit: Меня попросили показать пример карты. Не часто у вас имеется массив пар, но в прошлом я создал скрипт Python, который сгенерировал массив пар из файла необработанных данных. Затем я #include этого кода сгенерированной структуры и initalized карты с ним, как это:
#include <map>
#include <string>
#include <utility>
using namespace std;
typedef map<string, int> MyMap;
// this array may have been generated from a script, for example:
const MyMap::value_type raw_data[2] = {
MyMap::value_type("hello", 42),
MyMap::value_type("world", 88),
};
MyMap my_map(raw_data, raw_data + 2);
В качестве альтернативы, если у вас есть массив ключей, а также и массив значений данных, вы можете цикл над ними, называя карту. insert (make_pair (ключ, значение));
Вы также спрашиваете о memset и vector. Я не думаю, что есть какая-то реальная заслуга использования MemSet для инициализации вектора, поскольку векторы могут быть даны начальные значения для всех их элементов с помощью конструктора:
vector<int> v2(100, 42); // 100 ints all with the value of 42
vector<string> v(42, "initial value"); // 42 copies of "initial value"
сейчас, как насчет карты? – 2009-03-13 13:09:55
Добавлен пример для карты. –