Max*_*xpm 5 c++ arrays oop syntax constructor
您可以在同一行上声明和初始化常规数组,如下所示:
int PowersOfTwo[] = {1, 2, 4, 8, 16, 32, 64, 128};
Run Code Online (Sandbox Code Playgroud)
有没有办法在自定义类中复制此行为?所以,例如:
MyClass<int> PowersOfTwo = {1, 2, 4, 8, 16, 32, 64, 128};
Run Code Online (Sandbox Code Playgroud)
您可以让复制构造函数将数组作为其参数,但您仍需要在上一行声明该数组.
int InitializationArray[] = {1, 2, 4, 8, 16, 32, 64, 128};
MyClass<int> PowersOfTwo = InitializationArray;
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式实现您的类:
MyClass<int> array;
array = 1,2,3,4,5,6,7,8,9,10;//dont worry - all ints goes to the array!!!
Run Code Online (Sandbox Code Playgroud)
这是我的实现:
template <class T>
class MyClass
{
std::vector<T> items;
public:
MyClass & operator=(const T &item)
{
items.clear();
items.push_back(item);
return *this;
}
MyClass & operator,(const T &item)
{
items.push_back(item);
return *this;
}
size_t Size() const { return items.size(); }
T & operator[](size_t i) { return items[i]; }
const T & operator[](size_t i) const { return items[i]; }
};
int main() {
MyClass<int> array;
array = 1,2,3,4,5,6,7,8,9,10;
for (size_t i = 0 ; i < array.Size() ; i++ )
std::cout << array[i] << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
请参阅在线演示:http://www.ideone.com/CBPmj
我在昨天发布的两个类似的解决方案:
编辑:
您可以使用类似的技巧来填充现有的STL容器.例如,你可以这样写:
std::vector<int> v;
v+=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; //push_back is called for each int!
Run Code Online (Sandbox Code Playgroud)
所有你需要重载()和,运算符:
template<typename T>
std::vector<T>& operator+=(std::vector<T> & v, const T & item)
{
v.push_back(item); return v;
}
template<typename T>
std::vector<T>& operator,(std::vector<T> & v, const T & item)
{
v.push_back(item); return v;
}
Run Code Online (Sandbox Code Playgroud)
工作演示:http://ideone.com/0cIUD
再次编辑:
我很开心C++运算符.现在这个:
std::vector<int> v;
v << 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15; //inserts all to the vector!
Run Code Online (Sandbox Code Playgroud)
我觉得这看起来更好!
| 归档时间: |
|
| 查看次数: |
529 次 |
| 最近记录: |