C/C++ Interview Exam (周奕呈)
=================================
1. Where in memory are the variables stored?
* Global variables
* Static variables
* Constant data types
* Local variables (declared and defined in functions)
* Variables declared in *main* function
* Dynamically allocated space
```
Please answer here...
*
*
*
*
*
*
```
2. What are the modifiers "volatile" and "mutable"? When should they be used?
```
Please answer here...
````
3. Are the following legal or illegal uses of const pointers? Which lines are illegal ones? What are the benefits of using const?
~~~c
// Question 3
const char *str = "hello";
char c = *str;
str++;
*str = 'a';
str[1] = 'b';
~~~
```
str++; is illegal
Benefits are
1. 預防數值被更改
2. 可當作常數使用 例如pi = 3.1415 若設定為const 則variable可視為同等數值
```
4. What is the output of the following program?
~~~c++
// Question 4
#include <iostream>
class A
{
public:
A(int n = 0)
: m_n(n)
{
std::cout << 'd';
}
A(const A& a)
: m_n(a.m_n)
{
std::cout << 'c';
}
private:
int m_n;
};
void f(const A &a1, const A &a2 = A())
{
}
int main()
{
A a(2), b;
const A c(a), &d = c, e = b;
b = d;
A *p = new A(c), *q = &a;
static_cast<void>(q);
delete p;
f(3);
std::cout << std::endl;
return 0;
}
~~~
```
Please answer here...
ddccd
```
5. Please write a function to shuffle a vector of integers.
~~~c++
// Question 5
#include <vector>
#include <stdexcept>
#include <iostream>
class Shuffler
{
public:
static void shuffle(std::vector<int>& sequence)
{
// TODO: Waiting to be implemented
std::vector<int> temp, tempSort;
for (int i = 0; i<6; i++)
{
int timeV = getCurrentTime();
int Value = rand(timeV);
temp.push_back(Value);
tempSort.push_back(Value);
}
tempSort.sort();
for (int i= 0; i<6; i++)
{
for (int j=0; j<6; j++)
{
if (temp[j]==tempSort[i])
sequence[j] = i+1;
}
}
}
};
#ifndef RunTests
int main()
{
std::vector<int> v = { 1, 2, 3, 4, 5, 6 };
Shuffler::shuffle(v);
return 0;
}
#endif
~~~
6. Implement function *countNumbers* that accepts a sorted vector of integers and counts the number of vector elements that are less than the parameter *lessThan*. For example, the following program should return 2 because there are two vector elements less than 4. (Note: the vector size may be extremely large.)
~~~c++
// Question 6
#include <vector>
#include <stdexcept>
#include <iostream>
class SortedSearch
{
public:
static int countNumbers(
const std::vector<int>& sortedVector, int lessThan)
{
// TODO: Waiting to be implemented
if (sortedVector.size()<1)
return 0;
int l = 0, r = sortedVector.size()-1;
int m;
do
{
m = l+(r-l)/2;
if (sortedVector[m]<lessThan)
{
l = m+1;
continue;
}
if (sortedVector[m]>lessThan)
{
r = m-1;
continue;
}
if (sortedVector[m]==lessThan)
return m+1;
}
while (l<r);
return l+1;
}
};
#ifndef RunTests
int main()
{
std::vector<int> v = { 1, 3, 5, 7 };
std::cout << SortedSearch::countNumbers(v, 4);
return 0;
}
#endif
~~~
7. The following code is for inserting an element at the front of a list. Please correct it if you find anything inappropriate, and describe what you find.
~~~c++
struct IntElement
{
int data;
IntElement *next;
};
bool insertInFront (IntElement *head, int data) {
IntElement *newElem = new IntElement;
if (!newElem) return false;
newElem->data;
head = newElem;
return true;
}
~~~
```
Please describe what you find here ...
newElem->data; 沒有給data
head = newElem; 有給head 但原本的head沒有串上去 就遺失了
```
~~~c++
// Please write the correct code here...
bool insertInFront (IntElement *head, int data) {
IntElement *newElem = new IntElement;
if (!newElem) return false;
newElem->data = data;
newElem->next = head;
head = newElem;
return true;
}
~~~