테스트를 위해 일부 데이터로 컨테이너를 빠르게 채우고 싶습니다. 무엇을 할 수있는 최선의 빠른 방법은 무엇입니까? 너무 복잡한, 따라서 및 비인간적 짧은 안뿐만 아니라 당신이 memset 함수는 밑줄 배열을 가지고있는 것을 벡터를 knowning 뭔가를 할 수있는 생각stl 함수를 사용하여 벡터, 맵 및 세트를 빠르게 채울 수 있습니다.
편집
녀석을 장황하지? 또한지도는 어떻게됩니까?
테스트를 위해 일부 데이터로 컨테이너를 빠르게 채우고 싶습니다. 무엇을 할 수있는 최선의 빠른 방법은 무엇입니까? 너무 복잡한, 따라서 및 비인간적 짧은 안뿐만 아니라 당신이 memset 함수는 밑줄 배열을 가지고있는 것을 벡터를 knowning 뭔가를 할 수있는 생각stl 함수를 사용하여 벡터, 맵 및 세트를 빠르게 채울 수 있습니다.
편집
녀석을 장황하지? 또한지도는 어떻게됩니까?
을 이미 C 스타일 배열에서 말한 초기 데이터를 가지고 있다면이 STL 컨테이너에 "2- 반복자 생성자"가 있다는 것을 잊지 마십시오.
const char raw_data[100] = { ... };
std::vector<char> v(raw_data, raw_data + 100);
편집는 : 나는지도에 대한 예를 보여주기 위해 질문을 받았다. 자주 배열 쌍을 배열하는 것은 아니지만 과거에는 원시 데이터 파일에서 쌍의 배열을 생성 한 Python 스크립트를 만들었습니다. 지도를 호출, 당신이 그들에 루프 수, 당신은 키의 배열이있는 경우 또는
#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);
, 및 데이터 값의 배열 : 그럼이 코드 생성 구조를 #include를이 같은 그것으로지도를 initalized. 삽입 (make_pair (key, value));
memset 및 vector에 대해서도 문의하십시오.
vector<int> v2(100, 42); // 100 ints all with the value of 42
vector<string> v(42, "initial value"); // 42 copies of "initial value"
std::fill
또는 std::generate
을 사용할 수 있습니다.
예하시기 바랍니다 ... :) –
HTTP : 나는 벡터가 생성자를 통해 모든 요소에 대한 초기 값을 제공 할 수 있기 때문에 벡터를 초기화 memset 함수를 사용하는 실제 장점이 있다고 생각하지 않습니다 //msdn.microsoft.com/en-us/library/kaxe2wy9.aspx http://msdn.microsoft.com/en-us/library/46h7chx6.aspx – Paul
부스트 할당 라이브러리 방식 네임 스페이스 부스트를 사용하여 (http://www.boost.org/doc/libs/1_38_0/libs/assign/doc/index.html)
:: 지정;
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);
벡터 < int> v;
v + = 1, 2, repeat_fun (4, & 랜드), 4;
표준 : 생성하거나 표준 : generate_n는
내가 데이터를 삽입하는 사용자 정의 연산자를 사용하는 데 도움이됩니다 : 당신이 경우
#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";
}
아아, 간단한 for 루프는보다 간결한 작업을 수행합니다. :) –
지금,지도는 어떨까요? –
지도에 대한 예가 추가되었습니다. –