vector与list使用用法代码示例

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

今天在分析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()


相关文章
|
1月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
22 0
|
3月前
|
缓存 容器
从一个文件中讲稿未知数目的整数。对这些整数排序,然后把它们输出到标准输出设备。选用vector、deque 还是 list?
从文件读取未知数量的整数,排序后输出。选用`std::vector`因其能高效读取大量数据至连续内存,直接使用内置排序,提升缓存效率。避免使用`std::deque`和`std::list`,前者内存管理开销大,后者排序及随机访问较慢。
43 14
|
3月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
44 5
|
2月前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
98 1
|
3月前
|
存储 Java API
【Java高手必备】揭秘!如何优雅地对List进行排序?掌握这几种技巧,让你的代码瞬间高大上!
【8月更文挑战第23天】本文深入探讨了Java中对List集合进行排序的各种方法,包括使用Collections.sort()、自定义Comparator以及Java 8的Stream API。通过示例代码展示了不同情况下如何选择合适的方法:从简单的整数排序到自定义类对象的排序,再到利用Comparator指定特殊排序规则,最后介绍了Stream API在排序操作中的简洁应用。理解这些技术的区别与应用场景有助于提高编程效率。
88 4
|
4月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
5月前
|
存储 算法 C++
C++一分钟之-容器概览:vector, list, deque
【6月更文挑战第21天】STL中的`vector`是动态数组,适合随机访问,但插入删除非末尾元素较慢;`list`是双向链表,插入删除快但随机访问效率低;`deque`结合两者优点,支持快速双端操作。选择容器要考虑操作频率、内存占用和性能需求。注意预分配容量以减少`vector`的内存重分配,使用迭代器而非索引操作`list`,并利用`deque`的两端优势。理解容器内部机制和应用场景是优化C++程序的关键。
66 5
|
5月前
|
存储 索引 Python
Python教程:深入了解 Python 中 Dict、List、Tuple、Set 的高级用法
Python 中的 Dict(字典)、List(列表)、Tuple(元组)和 Set(集合)是常用的数据结构,它们各自有着不同的特性和用途。在本文中,我们将深入了解这些数据结构的高级用法,并提供详细的说明和代码示例。
221 2
|
5月前
|
存储 安全 Java
Java集合详解:Set, Map, Vector, List的对比与联系
Java集合框架核心包括List、Set、Map和Vector。List允许重复元素,如ArrayList(适合读取)和LinkedList(适合插入删除)。Set不允许重复,有HashSet(无序)和TreeSet(排序)。Map存储键值对,HashMap(无序)和TreeMap(排序)。Vector是线程安全的ArrayList替代品,但在多线程环境下使用。选择集合类型应根据应用场景,如有序、无序、键值对需求及线程安全考虑。
|
5月前
|
存储 C++
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点
53 7
下一篇
无影云桌面