通过删除空值来减小表的大小
reduce the size of the table by deleting null values
我正在使用c++编码霍夫曼,我有一个int表(计数[26])来计算频率(现在是充满值)。在文本中使用的字母数只有16,所以计数器表的其余部分以0分配,我想得到一个没有0的纯表,大小为16
我应该使用什么函数?
这里只是一个示例代码(我把值放在counter[]上):
int counter[26] = {1, 2, 3, 0, 5, 4, 1, 10, 0, 0, 0, 0, 5, 5, 8, 7, 1, 4, 0, 1, 0, 0, 8, 0, 0, 0};
int frequencies[16]={0};
for (int y=0; y<26 ;y++){
if (counter[y] != 0){
frequencies[y]=counter[y];
cout<<"n frequency table : "<< frequencies[y]<<endl;
}
}
std::copy_if
正好解决了这个问题。
传递std::begin(a), std::end(a), std::begin(b), [](int x)->bool{ return x; }
将数组a
中的非零元素复制到数组b
将counter
和frequencies
设置为std::vector,这样您就可以在frequencies
中最后一个有效元素的旁边设置迭代器,用于清理/调整大小。
vector<int> counter = {1, 2, 3, 0, 5, 4, 1, 10, 0, 0, 0, 0, 5, 5, 8, 7, 1, 4, 0, 1, 0, 0, 8, 0, 0, 0};
vector<int> frequencies(counter.size());
auto it = std::copy_if (counter.begin(), counter.end(), frequencies.begin(),
[](int i){return (i > 0);} );
while(it != frequencies.end()){
frequencies.erase(it);
}
我想得到一个没有0的纯表,大小为16
在这种情况下,您选择的数据结构是错误的。似乎您正在将每个字符与其各自的计数进行映射,然后您想要过滤掉不存在的字符计数。您应该使用std::map
。
我解决了这个问题,我只是添加了一个整数作为计数器(在频率从0到15的表中),小&简单的解决方案
非常感谢你的回答&谢谢你的帮助
我只是一个业余爱好者:)
int counter[26] = {1, 2, 3, 0, 5, 4, 1, 10, 0, 0, 0, 0, 5, 5, 8, 7, 1, 4, 0, 1, 0, 0, 8, 0, 0, 0};
int j=0; //
int frequencies[16]={0};
for (int y=0; y<26 ;y++){
if (counter[y] != 0 && letters[y] !='0'){
frequencies[j]=counter[y];
cout<<"n tableau frequence : "<< frequencies[j]<<endl;
j++;
}
}
相关文章:
- 从矢量中删除空元素
- 如何在不强制转换每个参数的情况下删除初始值设定项列表中从 int 到 char 的缩小转换?
- 使用 const char* 键映射 C++ 检索空值
- 返回空值的字符串值
- boost::any 如何检查空值/未定义的值
- 清除具有已删除赋值运算符的成员的类实例
- C++ - 无法从基类继承 |提供空值
- C++空值和此指针
- 使用 cin 或 getline() 输入空值
- 可变参数列表是否以空值终止?
- C++需要从数组中删除某些值
- 如何将整数重新初始化/设置为空值
- C++函数何时删除返回值?
- 如何在多映射 c++ 中删除重复值?
- 如何从 QStringList 中删除空字符串和空字符串
- C++ 从向量中删除重复值而不进行排序
- 检查构造函数的空值
- 无法从Linux,C ++执行"my_script" python脚本"main(filename)"功能;pModule = PyImport_Import(pName);返回空值
- 使用Nlohmann JSON将JSON数据保存在文件中时获取空值
- 通过删除空值来减小表的大小