使用stl函数快速填充矢量,贴图和设置的方法

5 c++ stl

我想用一些数据快速填充这些容器进行测试.有什么最好,最快捷的方法呢?它不应该太复杂,因此也不应该是非人性的,但也不要冗长

编辑

伙计我认为你可以用memset做一些事情,知道vector有一个下划线数组?那么,地图怎么样?

bay*_*yda 12

  • 提升任务库方式(http://www.boost.org/doc/libs/1_38_0/libs/assign/doc/index.html)

    using namespace boost :: assign;
    std :: vector <int> v;
    v + = 1,2,3,4,5,6,7,8,9;

    std :: map <std :: string,int> m;
    insert(m)("Bar",1)("Foo",2);

    vector <int> v;
    v + = 1,2,repeat_fun(4,&rand),4;

  • std :: generate或std :: generate_n

  • std :: backinserter - 有时会帮助你


Pau*_*aul 5

你可以使用std::fillstd::generate.


Bri*_*eal 3

如果您已经拥有初始数据(例如 C 样式数组),请不要忘记这些 STL 容器具有“2 迭代器构造函数”。

const char raw_data[100] = { ... };

std::vector<char> v(raw_data, raw_data + 100);
Run Code Online (Sandbox Code Playgroud)

编辑:我被要求展示地图的示例。通常情况下,您不会拥有一组对的数组,但在过去,我创建了一个 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);
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一个键数组和一个数据值数组,您可以循环遍历它们,调用 map.insert(make_pair(key, value));

您还询问了 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"
Run Code Online (Sandbox Code Playgroud)