【发布时间】:2011-07-06 07:01:12
【问题描述】:
所以我尝试制作一个向量,其中元素是结构指针和 int 的对,我开始认为这可能是不可能的..
假设我有以下结构:
struct node{
string str;
int size;
node *child[3];
node(string str1):str(str1){ size = 0;}
};
还有一个向量:
vector< pair<node*,int> > nodvector;
然后我尝试制作一个新节点并将其放入向量中,显然它不起作用:
int main(){
node* nod1 = new node("HELLO");
node* nod2 = new node("WORLD");
nodevector.push_back(pair<nod1,3>);
delete nod1;
delete nod2;
}
编译器冲我吼道: nod1 不能出现在常量表达式中 错误:模板参数 1 无效 错误:模板结构 std::pair 的模板参数列表中参数 2 的类型/值不匹配
这是不可能的事情吗? 有什么可以替代的解决方案? 非常感谢您的意见!
【问题讨论】:
-
你必须阅读一些c++教程。
-
尽量不要在容器中存储裸指针。这种方式很难进行正确的内存管理。
-
在创建pair以将其添加到向量中时,您应该返回模板参数,例如这对
(nod1,3) 通常,您对其进行typedef跨度> -
除了您询问的问题以及答案中提出的所有其他(与指针相关的)问题,您的构造函数应该采用
const string&而不是可变字符串。 (在一般情况下,这将保存一个副本,更重要的是它更正确、更健壮且更容易推理)
标签: c++ vector struct std-pair