wr-vector.cpp

#include <list>
#include <vector>
#include <string>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include "wr-vector.h"

#ifdef __cplusplus
extern "C" {
#endif

/*
 * create
 */
vector_ptr create_int_vector()
{
    return new std::vector<int>();
}

vector_ptr create_string_vector()
{
    return new std::vector<std::string>();
}

/*
 * push_back
 */
void add_int_to_vector(vector_ptr vec, const int num)
{
    std::vector<int>* v = static_cast<std::vector<int>*>(vec);
    v->push_back(num);
}

void add_string_to_vector(vector_ptr vec, const char* str)
{
    std::vector<std::string>* v = static_cast<std::vector<std::string>*>(vec);
    v->push_back(str);
}

/*
 * size
 */
int size_int_vector(vector_ptr vec)
{
    std::vector<int>* v = static_cast<std::vector<int>*>(vec);
    return v->size();
}

int size_string_vector(vector_ptr vec)
{
    std::vector<std::string>* v = static_cast<std::vector<std::string>*>(vec);
    return v->size();
}

/*
 * pop_back
 */
void pop_int_vector(vector_ptr vec)
{
    std::vector<int>* v = static_cast<std::vector<int>*>(vec);
    v->pop_back();
}

void pop_string_vector(vector_ptr vec)
{
    std::vector<std::string>* v = static_cast<std::vector<std::string>*>(vec);
    v->pop_back();
}

/*
 * display
 */
void display_int_vector(vector_ptr vec)
{
    std::vector<int>* v = static_cast<std::vector<int>*>(vec);
    int len = v->size();

    for (int i = 0; i < len; i++)
    {
        printf("%d", (*v)[i]);
    }
    printf("\n");
}

void display_string_vector(vector_ptr vec)
{
    std::vector<std::string>* v = static_cast<std::vector<std::string>*>(vec);
    std::vector<std::string>::iterator iter;

    for (iter = v->begin(); iter != v->end(); iter++)
    {
        printf("%s\n", iter->c_str());
    }
}

/*
 * insert
 */
void insert_int_vector(vector_ptr vec, int pos, const int num)
{
    std::vector<int>* v = static_cast<std::vector<int>*>(vec);
    std::vector<int>::iterator it;

    it = v->begin();
    v->insert(it + pos, num);
}

void insert_string_vector(vector_ptr vec, int pos, const char* str)
{
    std::vector<std::string>* v = static_cast<std::vector<std::string>*>(vec);
    std::vector<std::string>::iterator it;

    it = v->begin();
    v->insert(it + pos, str);
}

/*
 * erase
 */
void erase_int_vector(vector_ptr vec, int pos)
{
    std::vector<int>* v = static_cast<std::vector<int>*>(vec);
    std::vector<int>::iterator it;

    it = v->begin();
    v->erase(it + pos);
}

void erase_string_vector(vector_ptr vec, int pos)
{
    std::vector<std::string>* v = static_cast<std::vector<std::string>*>(vec);
    std::vector<std::string>::iterator it;

    it = v->begin();
    v->erase(it + pos);
}

/*
 * destroy
 */
void destroy_int_vector(vector_ptr vec)
{
    delete static_cast<std::vector<int>*>(vec);
}

void destroy_string_vector(vector_ptr vec)
{
    delete static_cast<std::vector<std::string>*>(vec);
}

#ifdef __cplusplus
}
#endif
 

wr-vector.h

#ifndef __WR_VECTOR_H__
#define __WR_VECTOR_H__


#ifdef __cplusplus
extern "C" {
#endif

/*
 * 定义一个不透明的指针类型,代表vector的指针
 * 确保C与C++中的定义一致
 */
typedef void* vector_ptr;

/*
 * 创建vector的函数指针声明
 */
vector_ptr create_int_vector();
vector_ptr create_string_vector();

/*
 * 向vector添加元素的函数指针声明
 */
void add_int_to_vector(vector_ptr vec, const int num);
void add_string_to_vector(vector_ptr vec, const char* str);

/*
 * size
 */
int size_int_vector(vector_ptr vec);
int size_string_vector(vector_ptr vec);

/*
 * pop_back
 */
void pop_int_vector(vector_ptr vec);
void pop_string_vector(vector_ptr vec);

/*
 * 销毁vector的函数指针声明
 */
void destroy_int_vector(vector_ptr vec);
void destroy_string_vector(vector_ptr vec);

/*
 * display
 */
void display_int_vector(vector_ptr vec);
void display_string_vector(vector_ptr vec);

/*
 * insert
 */
void insert_int_vector(vector_ptr vec, int pos, const int num);
void insert_string_vector(vector_ptr vec, int pos, const char* str);

/*
 * erase
 */
void erase_int_vector(vector_ptr vec, int pos);
void erase_string_vector(vector_ptr vec, int pos);


#ifdef __cplusplus
}
#endif

#endif /* __WR_VECTOR_H__ */
 

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐