c++ - 使用 delete 运算符删除结构中的元素

标签 c++

我有一个这样的结构:

struct m_doc{
char id[30];
int ISBN[30];
char title[50];
char author[50];
int year[30];

};

当我尝试使用删除运算符删除其中的元素时,发生了这种情况:

if (doc.id[i] == doc.id[j])
    delete[] doc.author[j], doc.id[j], doc.ISBN[j], doc.title[j], doc.year[j];//expression must have pointer type

错误只出现在doc.author的文档上,其他都没有问题。

最佳答案

以这种方式声明的数组在超出范围时会自动删除。 您只需删除这样声明的数组:

int* array = new int[30];
//Do work
delete[] array;

不过,您应该更喜欢 std::vector 而不是后一种数组样式和 std::array 而不是您在代码中使用的数组。它更不容易出错。

在您的情况下(几乎总是如此),std::vector 是最合适的数据类型。然后你可以做这样的事情:

if (doc.id[i] == doc.id[j]) {
    doc.author.erase(doc.author.begin() + j);
    //and so on
}

关于c++ - 使用 delete 运算符删除结构中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23274970/

相关文章:

C++ 计算事件的概率

c++ - map<string1, map<string2, map<string3, string>>> 是否比将字符串连接到 map<string1string2string3, string> 慢?

c++ - 有什么方法可以禁用特定代码行的编译器优化?

c++ - 如果稍后定义返回对象的类,我应该如何从转换函数返回对象?

c++ - 带链接列表的哈希表中的前 10 个频率

c++ - 通过setargreferee传递 vector 时,gtest中的EXPECT_CALL未实现

c++ - Bullet Physics - 在 body 的局部空间中应用扭矩脉冲

c++ - BOOST_THROW_EXCEPTION 在初始化列表中缺少三元运算符的解决方法

c++ - CUDA:最小化大数据类型的银行冲突

c++ - automake undefined reference