문제

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 구현에서는 그렇지 않지만 어쨌든 그렇게하지는 않습니다. 당신은 쌍과 벡터 <>의 구현 세부 사항에 의존 할 것입니다.

나는 나 자신이 벡터에 의존하는 죄를 약속했다. 이를 위해 나는 깊이 회개합니다. 그러나 쌍 <> ... 그냥 아니오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top