Если у вас уже есть начальные данные, скажем, в массиве стиля C, не забывайте, что эти контейнеры STL имеют «конструкторы с 2 итераторами».
const char raw_data[100] = { ... };
std::vector<char> v(raw_data, raw_data + 100);
Редактировать : меня попросили показать пример карты. Не часто у вас есть массив пар, лежащих вокруг, но в прошлом я создавал скрипт Python, который генерировал массив пар из файла необработанных данных. Затем я #include эту структуру, сгенерированную кодом и инициализировать карту с этим, как это:
#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);
В качестве альтернативы, если у вас есть массив ключей и массив значений данных, вы можете зациклить их, вызывая map.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"