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

时间:2009-03-12 22:22:10

标签: c++ stl

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

修改

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

4 个答案:

答案 0 :(得分:12)

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

    使用命名空间boost :: assign;
    的std ::矢量< int> V;
    v + = 1,2,3,4,5,6,7,8,9;

    的std ::地图< std :: string,int>米;
    insert(m)(“Bar”,1)(“Foo”,2);

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

  • std :: generate或std :: generate_n

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

答案 1 :(得分:5)

您可以使用std::fillstd::generate

答案 2 :(得分:3)

如果您已经有了初始数据,比如在C样式数组中,请不要忘记这些STL容器具有“2-iterator构造函数”。

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(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"

答案 3 :(得分:1)

我使用自定义运算符插入数据:

#include <vector>
#include <iostream>
#include <string>

using namespace std;

template <class T>
vector<T>& operator<<(vector<T>& vec, const T& x) {
    vec.push_back(x);
    return vec;
}

vector<string>& operator<<(vector<string>& vec, char* cstr) {
    string s(cstr);
    vec.push_back(s);
    return vec;
}

int main() {
    vector<int> foo;
    vector<string> bar;
    foo << 7 << 8 << 9 << 10;
    bar << "foo" << "bar" << "baz";
}