c ++ std :: pair, std :: vector & memcopy
문제
memcopy myvect.size ()*sizeof (foo) 바이트가
std::vector<std::pair<T1, T2> > myvect
배열로
struct foo{
T1 first;
T2 second;
}
배열이 벡터 크기와 동일한 수의 요소로 할당 된 경우?
감사해요
해결책
아니요, 수업이 포함되어 있습니다 T1
그리고 T2
동일한 레이아웃이나 정렬을 보장하지 않습니다 std::pair<T1, T2>
, 적어도 C ++ 98에서 (이후 std::pair
포드 유형이 아닙니다). 이야기는 C ++ 0x에서 다를 수 있습니다.
다른 팁
당신이 묻지 않은 질문에 대한 대답은 아마도 std::transform
:
struct pairToFoo {
// optionally this can be a function template.
// template<typename T1, typename T2>
foo operator()(const std::pair<T1,T2> &p) const {
foo f = {p.first, p.second};
return f;
}
};
std::transform(myvect.begin(), myvect.end(), myarray, pairToFoo());
또는 std::copy
, 그러나 foo를 줘 operator=
쌍을 매개 변수로 취합니다. 그러나 Foo를 다시 작성할 수 있다고 가정합니다.
struct foo {
T1 first;
T2 second;
foo &operator=(const std::pair<T1,T2> &p) {
first = p.first;
second = p.second;
return *this;
}
};
std::copy(myvect.begin(), myvect.end(), myarray);
일반적으로 아니요. 일부 플랫폼/컴파일러/STL 구현에서는 그렇지 않지만 어쨌든 그렇게하지는 않습니다. 당신은 쌍과 벡터 <>의 구현 세부 사항에 의존 할 것입니다.
나는 나 자신이 벡터에 의존하는 죄를 약속했다. 이를 위해 나는 깊이 회개합니다. 그러나 쌍 <> ... 그냥 아니오.
제휴하지 않습니다 StackOverflow