【发布时间】:2014-01-04 07:22:59
【问题描述】:
我有类似以下的东西:
#include <vector>
#include <iostream>
template<typename T>
class Vector {
private:
std::vector<T> base;
public:
Vector(const std::vector<T> vec) {base = vec;}
T& operator[](const int& index) {return base[index];}
std::vector<T> getBase() const {return base;}
};
class BigNum : public Vector<int>
{
public:
BigNum(const std::vector<int> init) : Vector(init) {}
};
int main()
{
int arr[] = {6,3,7,6,2};
std::vector<int> v(arr, arr + sizeof(arr) / sizeof(arr[0]));
BigNum num(v);
for(auto it = num.getBase().begin(); it != num.getBase().end(); ++it)
{
std::cout << *it << " "; // What's going on here??
}
std::cout << "\n";
for(int i = 0; i < 5; ++i)
{
std::cout << num.getBase()[i] << " ";
}
std::cout << "\n";
}
这两个循环的输出是:
30134336 0 7 6 2
6 3 7 6 2
这里发生了什么?第一个循环中的第一个数字(30134336)每次都会改变,但其余的数字都是一样的。提前致谢!
【问题讨论】:
-
为什么所有参数都标记为
const,尽管是按值传递的?您是否试图确保代码尽可能低效? :)
标签: c++ inheritance vector iterator