Các bạn giúp em câu này với ạ, em đọc mà không hiểu phải nên làm gì
Đệ quy tìm phần tử trong mảng
Chắc bài này là xây dựng phương thức generic
Em đang học C# đúng ko vậy ???
Em đang học kỹ thuật lập trình c/c++, em đang ôn để thi cuối kỳ đó anh
Vậy bài này liên quan đến con trỏ rồi
Chắc là dùng functor với cả templates thôi,
This post was flagged by the community and is temporarily hidden.
cái này có liên quan gì tới đệ quy đâu?
C++ có cái std::max_element
hay std::min_element
đó. Coi người ta khai báo thế nào. Vì là template nên code đầy đủ cũng dễ thấy luôn mà.
C thì ko có template, xài đỡ void*
với con trỏ hàm là được.
Bài này là đề thi mấy năm trước, mình đang ôn chứ trường không cho đăng đề như vậy đâu bạn
Mà bạn hiểu đề kêu nói là gì không bạn? Mình đọc mà không hiểu đề yêu cầu mình phải làm gì đó bạn
Mình còn học C với C++ thôi bạn, bạn nói mình hơi khó hiểu quá
Bạn nói cách làm thôi được không bạn, mình chỉ không hiểu là đề kêu làm gì thôi bạn
Bài kiểu này mà làm C/C++ thì chắc dùng con trỏ, hoặc template bên C++
Dạng bài này là 1 hàm có 2 tham số : 1 tham số dại diện cho 1 hàm nào đó dùng để xác định chuẩn, 1 tham số tiếp theo là kiểu dữ liệu đầu vào
đại khái là viết 1 cái hàm kiểu như vậy nè: http://en.cppreference.com/w/cpp/algorithm/max_element
có thể viết thành như sau:
template <class ForwardIter, class BinaryComp>
ForwardIter bestElement(ForwardIter first, ForwardIter last, BinaryComp comp)
{
if (first == last) return last;
ForwardIter best = first;
while (++first != last)
if (comp(*first, *best) > 0)
best = first;
return best;
}
trong cái template trên ta định nghĩa:
-
ForwardIter
là 1 kiểu cho phép xài++x
(forward nghĩa là tiến tới) và*x
(iter nghĩa là có thể dereference như con trỏ được). -
BinaryComp
là 1 kiểu cho phép xàix(a,b)
tức là nó như 1 hàm nhận 2 giá trị (binary function nghĩa là hàm có 2 biến), và giá trị trả về là số nguyên để so sánh với 0. Nếu giá trị trả về củax(a,b)
< 0 tức là a < b, == 0 nghĩa là a == b, > 0 nghĩa là a > b.
xài:
int maxAbs(int a, int b) { return abs(a) - abs(b); }
int max(int a, int b) { return a - b; }
int main()
{
int a1[] = {2,8,-5,6,-9,4,2,1};
std::vector<int> a2(a1, a1+sizeof(a1)/sizeof(*a1));
int best1 = *bestElement(a1, a1+sizeof(a1)/sizeof(*a1), maxAbs); //best1 = -9
int best2 = *bestElement(a2.begin(), a2.end(), max); //best2 = 8
}