STL作为一种动态数组,常用的函数类成员函数如下:
clear() 移除vector中所有数据,容器大小设置为0
empty() vector是否为空,为空则返回true
size() 返回vector中元素的个数
begin() 返回vector中第一个元素的迭代器
end() 返回vector中最后一个元素的下一个
erase() 删除某个位置的数据,并将指针指向下一个位置
pushBack() 在vector的尾部增加一个元素
案例一:
(1)系统初始化,输入该树。
(2)判断某个节点否存在。
(3)删除某个节点。
#include <vector>
#include <iostream>
using namespace std;
#define MAX_NAME_LENGTH (10)
#define MAX_NODE_NUM (7)
#define STR_NODE1 "node1"
#define STR_BLOCK1 "block1"
#define STR_BLOCK2 "block2"
#define STR_DATA1 "data1"
#define STR_DATA2 "data2"
#define STR_DATA3 "data3"
#define STR_DATA4 "data4"
typedef struct tagBiTree
{
int nodeId;
char nodeName[MAX_NAME_LENGTH];
}BiTree;
char *nodeName[] = {STR_NODE1, STR_BLOCK1, STR_BLOCK2, STR_DATA1, STR_DATA2, STR_DATA3, STR_DATA4};
vector<BiTree> g_bitree;
vector<BiTree>::iterator treeIterator;
void initSystem()
{
int index = 0;
BiTree node = {0};
for (index = 0; index < MAX_NODE_NUM; index++)
{
strncpy_s(node.nodeName, nodeName[index], strlen(nodeName[index]));
node.nodeId = index;
g_bitree.push_back(node);
}
return;
}
/*最后一个元素用换行,其他使用空格*/
void outputTree()
{
for (treeIterator = g_bitree.begin(); treeIterator != g_bitree.end(); treeIterator++)
{
if (treeIterator != g_bitree.end() - 1)
{
cout<<treeIterator->nodeName<<" ";
}
else
{
cout<<treeIterator->nodeName<<endl;
}
}
return;
}
/*删除同时要进行查找,如果找到,则可以删除,未能查找到,打印返回*/
void delNode(char* name)
{
for (treeIterator = g_bitree.begin(); treeIterator != g_bitree.end();)
{
if (0 == strcmp(treeIterator->nodeName,name))
{
break;
}
else
{
treeIterator++;
}
}
if (treeIterator == g_bitree.end())
{
cout<<"node:"<<name<<" does not exist"<<endl;
return;
}
treeIterator = g_bitree.erase(treeIterator);
return;
}
int main()
{
int index = 0;
int delCount = 0;
char delNodeName[MAX_NAME_LENGTH];
initSystem();
scanf_s("%d",&delCount);
while(index < delCount)
{
scanf_s("%s", delNodeName, sizeof(delNodeName));
delNode(delNodeName);
index++;
}
outputTree();
return 0;
};