#include <iostream>#include <vector>#include <algorithm>int v=0;struct A{ A() : refValue( v++) { std::cout<<"constructor refValue="<<refValue<<std::endl; } A( const A &r ) : refValue(r.refValue) { std::cout<<"copy constructor refValue="<<refValue<<std::endl; } A& operator=( const A &r ) { refValue = r.refValue; std::cout<<"operator= refValue="<<refValue<<std::endl; return *this; } ~A() { std::cout<<"destructor refValue="<<refValue<<std::endl; } int refValue;};A GenerateUnique(){ A unique; return unique;}struct B{ B( const int n) : v() { std::generate_n( std::back_inserter( v ),n,&GenerateUnique ); } std::vector< A > v;};int main(){ B b(3);}
如果我把我的主要改成这个:
struct B{ B( const int n) : v(n) { } std::vector< A > v;};
然后将一个A类型的对象复制到所有向量元素中.
有没有办法创建一个包含所有唯一对象的向量(如第一个示例中所示)?
为了更清楚:我有一个包含向量的类.此向量必须包含所有唯一对象(不是一个对象的副本).我想在初始化列表中初始化它(不在构造函数的主体中).
解决方法 你的第一次尝试是有效的.在目前的标准C 03这一行
std::vector< A > as( n );
明确定义为创建一个A对象并复制n次.
我相信在C 0x中,这被改为创建n默认构造的As(一个小差异).然后,您或许可以在As构造函数中执行某些 *** 作,以使每个实例都是唯一的.
现在你不能.
总结以上是内存溢出为你收集整理的c – 如何生成具有唯一值的向量?全部内容,希望文章能够帮你解决c – 如何生成具有唯一值的向量?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)