이 코드 조각은 문자열, 구분자 (공백) 및 벡터를 인수로 받고 구분자에 따라 문자열을 분할하여 벡터에 저장합니다. push_back을 사용하면 벡터에 아무것도 저장하지 않지만 [] 연산자를 사용하면 작동합니다. 누군가 push_back이 작동하지 않는 이유를 설명 할 수 있습니까?
void split(const string & input,char delim,vector<string> & elems){
stringstream ss;
ss.str(input);
string item;
int i = 0;
while(getline(ss,item,delim)){
//elems.push_back(item);
elems[i] = item;
i++;
}
}
int main(){
char delim = ' ';
vector<string> item(2);
string input;
getline(cin,input);
split(input,delim,item);
}
어떤 크기 (n)로 벡터를 미리 할당 한 경우 pushback (item)은 항목을 인덱스 n에 배치하고 벡터의 크기를 더 큰 크기로 조정합니다. 예정된 문자열 수를 알고 있다면 elems[i] = item;
크기 n을 할당 한 후 어쨌든 사용해야 합니다.
들어오는 개수를 모르지만 n보다 클 것이라는 것을 알고 있다면 미리 할당하지 마십시오. 대신, 일부 메모리를 예약하십시오.elems.reserve(n);
그런 다음 elems.push_back(item);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다