








































































Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
The CPP C Certified Professional Programmer Certification Exam Prep guide is designed for software professionals specializing in the C programming language. This guide covers syntax, data structures, memory management, pointers, algorithms, debugging, and best coding practices. Each topic is explained with examples and practical exercises aligned with the certification exam. Practice questions and code-based scenarios help candidates reinforce technical skills and exam readiness. Ideal for programmers seeking formal validation of C programming expertise.
Typology: Exams
1 / 80
This page cannot be seen from the preview
Don't miss anything!









































































Question 1. Which container provides constant‑time random access to its elements and stores them contiguously? A) std::list B) std::deque C) std::vector D) std::forward_list Answer: C Explanation: std::vector stores elements in a contiguous memory block, allowing O(1) random access via the subscript operator. Question 2. In which situation does inserting an element into a std::list invalidate iterators? A) Inserting at the front B) Inserting at the back C) Inserting in the middle using splice D) No iterator is invalidated by insertion Answer: D Explanation: std::list insertion does not invalidate any existing iterators, pointers, or references to other elements. Question 3. Which of the following operations on std::deque has the worst‑case complexity of O(n)? A) push_back B) push_front C) random access via operator[] D) insert at an arbitrary position Answer: D Explanation: Inserting at an arbitrary position may require shifting elements and thus has linear complexity.
Question 4. Which container adapter does not allow direct access to the underlying container? A) std::stack B) std::queue C) std::priority_queue D) All of them expose the underlying container Answer: C Explanation: std::priority_queue hides the underlying container; only top() is accessible. std::stack and std::queue provide protected access via member functions but still hide the container. Question 5. When using std::stack>, which member function removes the top element? A) pop() B) erase() C) remove() D) delete() Answer: A Explanation: std::stack defines pop() to remove the element at the top of the stack. Question 6. What is the time complexity of std::queue::push when the underlying container is std::list? A) O(1) amortized B) O(log n) C) O(n) D) O(1) worst‑case Answer: D Explanation: std::list provides constant‑time insertion at the back, so push is O(1) worst‑case. Question 7. Which of the following statements about iterator validity for std::vector is correct after a call to push_back that causes reallocation?
B) count() C) equal_range() D) lower_bound() Answer: C Explanation: equal_range returns a pair of iterators delimiting the range of elements with the specified key. Question 11. What must a custom comparator for std::set satisfy? A) Strict weak ordering B) Total ordering only C) Equality comparison only D) It can be any callable returning bool Answer: A Explanation: The comparator must impose a strict weak ordering to guarantee the container’s invariants. Question 12. Which algorithm returns the first element in a range that does NOT satisfy a given predicate? A) std::find_if_not (C++11) B) std::find_if C) std::search D) std::mismatch Answer: A Explanation: std::find_if_not finds the first element for which the predicate returns false. Question 13. Which non‑modifying algorithm determines whether two ranges are equal using the default operator==? A) std::mismatch B) std::equal
C) std::lexicographical_compare D) std::adjacent_find Answer: B Explanation: std::equal returns true if every pair of elements in the two ranges compare equal. Question 14. What does std::adjacent_find return when no adjacent equal elements are found? A) The first iterator of the range B) The last iterator (end) of the range C) nullptr D) Throws an exception Answer: B Explanation: If no such pair exists, adjacent_find returns the end iterator of the searched range. Question 15. Which algorithm counts the number of elements satisfying a predicate in a range? A) std::count_if B) std::accumulate C) std::inner_product D) std::reduce Answer: A Explanation: std::count_if traverses the range and increments a counter each time the predicate returns true. Question 16. Which algorithm can be used to locate the first occurrence of a sub‑range within another range? A) std::search B) std::find_end C) std::find_first_of D) std::adjacent_find
Question 20. Which algorithm copies elements from one range to another using move semantics? A) std::copy B) std::move C) std::copy_backward D) std::transform Answer: B Explanation: std::move moves (i.e., transfers) each element from the source to the destination, leaving the source in a valid but unspecified state. Question 21. Which overload of std::transform takes two input ranges and applies a binary operation? A) std::transform(InputIt, InputIt, OutputIt, UnaryOp) B) std::transform(InputIt, InputIt, InputIt2, OutputIt, BinaryOp) C) std::transform(InputIt, InputIt, OutputIt, BinaryOp) D) std::transform(InputIt, InputIt, InputIt2, OutputIt, UnaryOp) Answer: B Explanation: The five‑parameter overload receives two input ranges and a binary operation to produce the output. Question 22. Which algorithm reverses the order of elements in a range in place? A) std::rotate B) std::reverse C) std::swap_ranges D) std::shuffle Answer: B Explanation: std::reverse swaps elements symmetrically until the middle is reached, reversing the range.
Question 23. After calling std::remove on a std::vector, which iterator should be used to actually erase the “removed” elements? A) The iterator returned by std::remove itself B) vector.begin() C) vector.end() D) No additional erase is needed Answer: A Explanation: std::remove reorders elements and returns the new logical end; erasing from that iterator to vector.end() physically eliminates the unwanted elements. Question 24. Which algorithm partitions a range such that all elements satisfying a predicate precede those that do not, without preserving relative order? A) std::stable_partition B) std::partition C) std::sort D) std::unique Answer: B Explanation: std::partition performs an unstable partition; stable_partition maintains relative order. Question 25. Which algorithm removes consecutive duplicate elements from a sorted range? A) std::unique B) std::remove_if C) std::erase_if (C++20) D) std::adjacent_find Answer: A Explanation: std::unique eliminates adjacent equal elements, returning an iterator to the new logical end. Question 26. Which sorting algorithm guarantees stability?
B) The iterator to the last element less than the value C) end() D) The iterator to the first element not less than the value (the insertion point) Answer: D Explanation: lower_bound returns the first position where the value could be inserted without breaking order. Question 30. Which algorithm merges two sorted ranges into a third range without modifying the original ranges? A) std::inplace_merge B) std::merge C) std::set_union D) std::copy Answer: B Explanation: std::merge reads from both input ranges and writes the merged result to the output iterator. Question 31. Which algorithm can be used to transform two sorted ranges into their set intersection? A) std::set_union B) std::set_intersection C) std::set_difference D) std::merge Answer: B Explanation: std::set_intersection writes elements that appear in both sorted ranges. Question 32. Which heap operation moves the largest element to the front of the underlying container? A) std::push_heap
B) std::pop_heap C) std::make_heap D) std::sort_heap Answer: C Explanation: std::make_heap arranges the elements into a max‑heap where the largest element is at the front (begin). Question 33. After calling std::push_heap on a range that already satisfies heap property, what happens? A) The range is sorted B) The last element becomes the new heap root C) The heap size increases by one, assuming the new element is placed at the end before the call D) Undefined behavior Answer: C Explanation: push_heap assumes a new element has been added at the end and restores heap property, effectively increasing the logical heap size. Question 34. Which algorithm returns the smallest element in a range? A) std::min_element B) std::min C) std::lower_bound D) std::find_min Answer: A Explanation: std::min_element traverses the range and returns an iterator to the minimal element. Question 35. Which predefined functor represents the binary operation “greater than”? A) std::less<> B) std::greater<> C) std::compare<>
Answer: C Explanation: std::fixed switches to fixed‑point notation; setprecision then defines the number of digits after the decimal point. Question 39. What state does a std::istream enter after a failed extraction that sets failbit? A) eofbit is also set B) goodbit is set C) badbit is set D) The stream becomes false in boolean context Answer: D Explanation: When failbit is set, the stream evaluates to false; you can test it with if (!stream). Question 40. Which class template is used to read and write binary data to a file? A) std::ofstream (opened with ios::binary) B) std::fstream (opened with ios::binary) C) std::stringstream D) std::istringstream Answer: B Explanation: std::fstream can be opened for both input and output and can be configured for binary mode with ios::binary. Question 41. Which keyword introduces a template parameter list for a function? A) template B) typename C) class D) generic Answer: A Explanation: The correct syntax is template (or template).
Question 42. What is the result of calling a function template with an explicit non‑type argument that cannot be deduced? A) Compilation error B) Runtime error C) The argument is ignored D) The compiler uses a default value Answer: A Explanation: Non‑type template arguments must be provided explicitly if they cannot be deduced; otherwise the compilation fails. Question 43. Which statement about partial specialization of class templates is true? A) It can be applied to function templates B) It allows specialization based on a subset of template parameters C) It must be defined inside the primary template definition D) It is not allowed in the same translation unit as the primary template Answer: B Explanation: Partial specialization lets you specialize a class template for certain patterns of its template arguments while leaving others generic. Question 44. What does the “most vexing parse” refer to in C++? A) Ambiguity between a function declaration and an object definition B) A syntax error caused by missing semicolons C) The inability to parse templates with > > D) Overloaded operator ambiguity Answer: A Explanation: The most vexing parse occurs when something that looks like an object definition is interpreted as a function declaration.
B) std::swap only works for built‑in types C) std::swap requires a global specialization D) std::swap cannot be overloaded Answer: A Explanation: The generic std::swap calls using std::swap; swap(a,b); which enables argument‑dependent lookup (ADL) to find a user‑defined swap. Question 49. Which of the following is true about std::function? A) It can store any callable with a matching signature, including lambdas, function pointers, and bind expressions B) It can only store function pointers C) It cannot be copied D) It must be instantiated with a non‑type template argument Answer: A Explanation: std::function is a type‑erased wrapper that can hold any callable object matching its signature. Question 50. In a range‑based for loop, which expression is used to obtain the iterator to the element being processed? A) The loop variable itself (by reference) B) std::begin() C) std::next(iterator) D) No iterator is directly exposed Answer: A Explanation: The loop variable is a reference (or copy) to the current element; the iterator is not directly accessible unless you manually obtain it. Question 51. Which container adaptor provides constant‑time access to the largest element? A) std::stack
B) std::queue C) std::priority_queue D) std::deque Answer: C Explanation: priority_queue maintains the largest (or smallest, depending on comparator) element at the top, accessible in O(1). Question 52. What is the complexity of std::map::find? A) O(1) average B) O(log n) C) O(n) D) O(n log n) Answer: B Explanation: std::map is typically implemented as a red‑black tree, giving logarithmic search time. Question 53. Which algorithm can be used to remove all elements that satisfy a predicate from a std::list in a single pass? A) std::remove_if followed by erase B) std::list::remove_if (member function) C) std::erase_if (C++20) D) std::filter (non‑existent) Answer: B Explanation: std::list provides a member remove_if that directly erases matching elements without the two‑step remove‑erase idiom. Question 54. Which of the following statements about std::move_iterator is correct? A) It converts a forward iterator into a backward iterator B) It changes the value type to an rvalue reference when dereferenced C) It makes the underlying container immutable
Explanation: std::set stores unique keys; attempts to insert a duplicate are ignored. Question 58. Which algorithm can be used to reorder a range so that the element at position n is the same as if the entire range were sorted, without fully sorting the range? A) std::partial_sort B) std::nth_element C) std::stable_sort D) std::sort Answer: B Explanation: nth_element partitions the range such that the nth element is in its final sorted position, and all preceding elements are less. Question 59. In a lambda [&a](int x){ return a + x; }, what is the capture mode for variable a? A) By copy B) By reference C) Not captured D) Captured by value‑init Answer: B Explanation: [&a] captures a by reference, allowing the lambda to see modifications to a after its creation. Question 60. Which manipulator forces integer output to be displayed in hexadecimal notation? A) std::hex B) std::showbase C) std::uppercase D) std::dec Answer: A Explanation: std::hex changes the basefield of the stream to hexadecimal.
Question 61. Which of the following is a correct declaration of a function template that takes a callable and applies it to each element of a container? A) template void apply(C& c, F f) { for (auto& e : c) f(e); } B) template void apply(C& c, void(*f)(C::value_type)) C) template void apply(F f, std::vector& v) D) template void apply(C c, F f) = delete; Answer: A Explanation: The first option correctly templates both the container type and the callable, using a range‑based for loop. Question 62. Which statement about std::unique_ptr is false? A) It cannot be copied B) It can be moved C) It automatically deletes the owned object when it goes out of scope D) It supports pointer arithmetic Answer: D Explanation: std::unique_ptr behaves like a raw pointer but does not support arithmetic operations. Question 63. What is the effect of calling std::ios::clear() on a stream? A) Resets all formatting flags to default B) Clears the error state flags (eofbit, failbit, badbit) C) Flushes the output buffer D) Closes the stream Answer: B Explanation: clear() resets the stream’s error state, allowing further I/O operations. Question 64. Which algorithm can be used to determine whether one sorted range is a subset of another sorted range? A) std::includes