c调用c++ vector
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__ */
更多推荐



所有评论(0)