如何重载 std::vector::operator=()
How to overload std::vector::operator=()
我需要分配类型为std::vector = arma::vec,即将犰狳数学库中的向量分配给std::vector。
template <typename T>
std::vector<T>& std::vector<T>::operator=(arma::vec right) {
std::size_t s(right.size());
this->resize(s);
for (std::size_t i = 0; i < s; i++)
*this[i] = right(i);
return *this;
}
我尝试了这种方式,但编译器不同意: error: invalid use of incomplete type ‘class std::vector<_RealType>’
是否可以重载 std::vector 类的赋值运算符?
需要考虑的要点:
-
operator=
只能作为成员函数重载。 - 除非将函数声明为类的成员函数,否则无法按现有方式定义运算符函数。
- 有简单的解决方法可以分配
arma::vec
。使用它们,而不是尝试定义oprator=
重载。
演示如何将不同类型的容器分配给std::vector
的示例代码。
#include <iostream>
#include <vector>
#include <set>
int main()
{
std::vector<int> a;
int b[] = {1, 2, 3, 4, 5};
std::set<int> c{10, 20, 30, 40, 50};
a = {std::begin(b), std::end(b)};
for ( int el : a )
{
std::cout << el << " ";
}
std::cout << std::endl;
a.assign(std::begin(c), std::end(c));
for ( int el : a )
{
std::cout << el << " ";
}
std::cout << std::endl;
}
在您的情况下,您可以使用以下任一方法:
std::vector<YourType> v;
v = {std::begin(right), std::end(right)};
v.assign(std::begin(right), std::end(right));
不,不可能这样做。如果扩展 std
命名空间,则甚至是未定义的行为,除非这些符号的标准明确允许。也就是说,我没有看到编译器投入资源来跟踪它。但是,它可能与已在使用的符号冲突。
在我所知道的 STL 实现中,许多函数都是在具有未指定名称的基类中实现的。
确实有一个类似于铸造运算符的东西:operator std::vector<int>() const
这需要添加到需要转换的类型中。但是,由于这也是库的一部分,我认为您没有有效的选择。
相关文章:
- std::vector::assign/std::vector::operator=(const&) 是否保证在"this"中重用缓冲区?
- 为什么 std::vector::operator= 过度分配内存
- 我可以在 c++ 中正确设置 std::vector by operator[] 的第 n 个值吗?
- 如何重载 std::vector::operator=()
- 为什么 vector::operator[] 的实现方式与 map::operator[] 不同?
- Vector::at vs. vector::operator[] -- 不同的行为
- std::vector::back 和 vector::operator[ vector::size() - 1] 之间
- vector::push_back vs vector::operator[]
- 正在获取 C++11 中 std::vector::operator[](size) 未定义行为的地址
- 对矢量(vector::operator[]和vector:(size))的只读访问是异步安全的
- 如何在使用vector::operator[]迭代结构的向量时访问结构成员
- vector::at vs. vector::operator[]
- 从std::vector::operator[]获取返回地址做什么
- std::vector:<T>:resize(n) vs reserve(n) with operator[]
- 优化' std::vector operator [] ' (vector访问),当它成为瓶颈时
- 为什么vector迭代器没有显示operator= ?
- 使用std::vector::at或std::vector::operator[]访问vector:中存储的对象
- std::vector::operator[]返回的引用可以使用多长时间?
- C++: std::vector [] operator
- EASTL 与 STL,std::vector:<uint64_t>:operator[] 怎么会有这样的性能差异