我想用一些数据快速填充这些容器进行测试。有什么最好,最快捷的方法呢?它不应该太复杂,因此也不应该是非人性的,但也不要冗长
修改
伙计我认为你可以用memset做一些事情,知道vector有一个下划线数组? 那么,地图呢?
答案 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
答案 1 :(得分:5)
您可以使用std::fill
或std::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";
}