대괄호를 사용하지 않고 다음 함수 헤더를 사용하여 위의 프로그램을 작성하려면 어떻게해야합니까?포인터 (C++)를 사용하여 배열에서 요소가 처음 나타나는 경우
int findFirst(const string* a, int n, string target)
대괄호를 사용하지 않고 다음 함수 헤더를 사용하여 위의 프로그램을 작성하려면 어떻게해야합니까?포인터 (C++)를 사용하여 배열에서 요소가 처음 나타나는 경우
int findFirst(const string* a, int n, string target)
단순히 기능 헤더를 바꿀 수 있습니다. const string a[]
은 이미 포인터 매개 변수이며 정확히 const string* a
과 동일 함을 의미합니다.
그런 다음, 다음 중 하나를 수행 할 수 있습니다 역 참조 i
for (int i = 0; i < n; i++, a++)
if (*a == target)
또는 당신이 사용할 수있는 포인터 만 모든
for (const string* p = a; p < a + n; p++)
if (*p == target)
먼저, 경우에 따라 a + i
for (int i = 0; i < n; i++)
if (*(a + i) == target)
또는 증가 a
inp로 포인터를 갖는 함수를 작성한다. 이 것,
#include <algorithm>
int findFirst(const std::string* a, int n, std::string target)
{
if (a)
{
int res = std::distance(a, std::find(a, a + n, target));
if (res < n)
{
return res;
}
}
return -1;
}
셋째, 당신이 표준 라이브러리에서 알고리즘을 사용할 수있는 항목의 위치를 검색하기위한,
int findFirst(const string * a, int n, string target)
{
if (a)
{
// do search
}
return -1;
}
둘째, 유타 매개 변수는이 nullptr에이 포인터를 확인하기 위해 더 나은 (0) 것 복사 생성자의 불필요한 호출을 제외하기 위해 const 참조로 대상을 전달하는 것이 좋습니다. 결과적으로 다음과 같은 최종 솔루션을 얻을 수 있습니다.
#include <algorithm>
int findFirst(const std::string* a, int n, const std::string& target)
{
if (a)
{
int res = std::distance(a, std::find(a, a + n, target));
if (res < n)
{
return res;
}
}
return -1;
}
(* a == target)을 사용하여 a에서 요소에 액세스 할 수 있습니다. 그런 다음 포인터 연산 방식을 사용하여 a를 증가시킬 수 있습니다. a ++는 자동으로 다음 문자를 가리 킵니다. – KillPinguin
http://www.cplusplus.com/reference/algorithm/find/ –