我必须将元素插入指向矢量的指针。我写了下面的代码,但它给出了段错误。有人可以指出这段代码中有哪些错误,或者我们如何做到这一点。C++指向矢量的指针
int main()
{
vector<int> *te;
te->push_back(10);
cout<<te->size()<<endl;
return 0;
}
我必须将元素插入指向矢量的指针。我写了下面的代码,但它给出了段错误。有人可以指出这段代码中有哪些错误,或者我们如何做到这一点。C++指向矢量的指针
int main()
{
vector<int> *te;
te->push_back(10);
cout<<te->size()<<endl;
return 0;
}
你永远不分配向量:
vector<int> *te = new vector<int>;
而且,你也不需要动态分配。一个清洁的方法是使用自动存储:
int main()
{
vector<int> te;
te.push_back(10);
cout<<te.size()<<endl;
return 0;
}
downvote的任何理由? – 2012-04-01 09:55:48
谢谢!其实我必须实现一个简单的C++ - 模板类来管理一个向量的智能指针。请你给我建议如何做到这一点? – Mukesh 2012-04-01 10:05:59
vector<int> *te;
te->push_back(10);
您已经声明指向一个vector
;你还没有初始化它指向一个有效的内存。你需要使用new
构建一个新的向量。
vector<int> *te = new vector<int>();
但是,您应该不这样做。维持一个指向矢量的指针的原因很少,而且你在管理自己的内部存储器时完全无效。
读一点关于RAII。这是一种用于通过对象的生命周期来管理动态分配的内存的技术。 vector
使用此方法在超出范围时清理其内部动态分配的存储。
维护指向矢量的指针会阻止它正常工作,依靠您自己调用delete
,从根本上消除了首先在数组上使用vector
的一个主要优点。
我们可以创建一个指向'vector'包装类的指针吗? – neckTwi 2013-11-13 06:14:49
@neckTwi:像'unique_ptr
我们不应该创建一个'vector'堆对象,或者我们不应该创建一个指向'vector'的指针?我可以创建一个堆栈对象并将其指针传递给其他函数吗?我想要一个指向'vector'的指针,这也是为什么我们需要一个指向任何其他类型的指针的原因。特别是工会支持指针,但不支持引用。 – neckTwi 2013-11-13 10:29:26
在开始使用它之前,您必须先为指针分配空间。
vector<int> *te = new vector<int>();
插入这行到你的代码刚过vector<int> *te;
注意
如果你是想用指针来访问已定义的载体,你就不必为指针分配的地方。
例如;
vector<int> foo={1,2,3,4,5};
vector<int> * te=&foo;
te->push_back(6); // its legal.
为什么你需要一个指向矢量的指针?如果我们知道背后的动机,也许我们可以做得更好。 – 2012-04-01 09:51:55
其实我必须实现一个简单的C++ - 模板类来管理一个智能指针向量vector.Can你可以请教我如何做到这一点? – Mukesh 2012-04-01 09:58:35
为什么你不简单地使用智能指针到矢量呢?即'shared_ptr>'... –
enobayram
2012-04-01 10:07:02