가장 빠름 : 아무 것도하지 않습니다. std::string
은 기본적으로 대부분의 용도로 std::vector<char>
의 기능을 수행 할 수 있으며, 문자 그대로 아무것도하지 않는 것은 항상 뭔가를하는 것보다 빠를 것입니다.
std::string p;
cin >> p;
// just use p
// p[0] is the first char, e.g. '0', so you don't have to do anything
// p[1] is the second, etc.
// p.size() is the size
다음 빠른 : 있는지 확인합니다
std::vector<char> data(p.begin(), p.end());
는 (적어도 p.size()
의) 정확한 양의 단 하나 개의 할당을 수행하고로 문자열을 복사합니다 : 그냥 직접 벡터를 구축 가능한 한 효율적으로 벡터.
다음 : 한 번에 각 문자 하나를 추가 : 직접 시공 방법에 반대
// C++11
std::vector<char> data;
for (char c : p) {
data.push_back(c);
}
// C++03
for (size_t i = 0; i < data.size(); ++i) {
data.push_back(p[i]);
}
문자열이 길수록 더 추가 할당/복사가 완료됩니다. 정확한 양은 구현에 따라 다르지만,이 접근법은 항상 더 느릴 것입니다 - 특정 구현의 기본 설정이라 할지라도 큰 초기 용량을 가진 벡터를 구성합니다 (push_back
을 분기해야만하므로 resize
인지 확인해야합니다 ...). 직접 건설은 그렇게 할 필요조차 없다).
' 처음으로 (p.begin(), p.end());' –
juanchopanza
문자열이 매우 큰 경우가 아니면 병목 현상이 발생하지 않습니다. 너 뭐하려고? 왜 천천히 생각하니? @ juanchopanza의 메소드는'1' heap allocation을 필요로하지만 당신은'O (log p.size())'할당을 필요로합니다. 'p'의 크기가 큰 차이가 나는가? – Pradhan
아마도 관련이 있습니다 - [ "C++ 프로그램에서 scanf()를 사용하는 것이 cin을 사용하는 것보다 빠릅니까?"] (http://stackoverflow.com/questions/1042110/using-scanf-in-c-programs-is-faster-than- using-cin). – Pradhan