IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> vector与list使用用法代码示例 -> 正文阅读

[C++知识库]vector与list使用用法代码示例

今天在分析amr解码时,发现用到了vector和list。考虑到这两种容器类使用的场景很多,想把他们的使用方法分享给读者。所以我单独抽离一部分单独编译,具体代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <list>
#include <unistd.h>
typedef unsigned char   uint8_t;
#define AMR_CMR_BITS 4
#define AMR_BE_TOC_BITS 6

#define FT_NODATA   15
enum AMR_CLASS{ AMR_CLASS_NONE, AMR = 1, AMR_WB };
enum AMR_MODE{ AMR_MODE_NONE, BE = 1, OA };    // BE: bindwidth-efficient, OA: octet-align 

typedef union be_toc_entry
{
    uint8_t v;
    struct {
        uint8_t q:1;
        uint8_t ft:4;
        uint8_t nl:1;   // not_last flag,  0: last frame, 1: not last
        uint8_t r:2;    // reserved
    };
}be_toc_entry_t;
class AmrFrameData
{
   public:
        AmrFrameData( uint8_t ft = FT_NODATA, uint8_t q = 1 ): frame_type(ft), quality(q){ }
   public:
        uint8_t frame_type;
        uint8_t quality;
        // data[0] is frame header for amr file, data[1] and remain bytes are core frame data
        std::vector<uint8_t> data;  
};
void testvector()
{
  std::vector<AmrFrameData> frame_data_list;
  std::list<AmrFrameData *> fdata_ptr_list;   // not used when construct
  frame_data_list.resize(1);
  be_toc_entry_t entry;
  std::vector<AmrFrameData>::iterator it = frame_data_list.begin();
  int l = 0;
  uint8_t v = 1;
  do
  {

        // multiple AMR frames in one RTP payload, this may happens rarely
        if ( it == frame_data_list.end() )
        {
            frame_data_list.resize( frame_data_list.size() + 1 );
            it = frame_data_list.end() - 1;
        }
        it->data.resize(10);
        it->data[0]=0;
        uint8_t *p = &it->data[1];
        for(int j=0;j<9;j++)
        {
          *p=0; 
          p++;
        }       
        it->frame_type = v;
        it->quality = v;
        it++;
        l++;

  } while ( l < 10 );
  
  std::vector<AmrFrameData>::iterator fdata_it;
  for ( fdata_it = frame_data_list.begin(); fdata_it != frame_data_list.end(); fdata_it++ )
        fdata_ptr_list.push_back(&*fdata_it);
 fdata_ptr_list.clear();
 frame_data_list.clear();
}
int main()
{
   char g = 0;
   do
   {
       testvector();
       //g = getchar();
       //printf('g=%c\n',g);
       //cout >> g;
       usleep(1000);
   }while (g!='q');
}

将这些代码复制到文本文件中,文件命名韦testvector.c。然后用g++ testvector.c -o testvector? 可以完成编译。

vector的使用相关方法有:

std::vector<AmrFrameData>::iterator it = frame_data_list.begin();

frame_data_list.resize( frame_data_list.size() + 1 );

for ( fdata_it = frame_data_list.begin(); fdata_it != frame_data_list.end(); fdata_it++ )
? ? ? ? fdata_ptr_list.push_back(&*fdata_it);

list的使用相关方法有:

fdata_ptr_list.push_back(&*fdata_it);

fdata_ptr_list.clear()

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:11:57  更:2022-04-24 09:13:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 21:22:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码