C++ 的 STL -vector 的教學小筆記

1. 放入資料
印出資料1
印出資料2

#include <iostream>
#include <vector>
using namespace std;

void PrintVector1(vector<int> printVector);		//印出方法1
void PrintVector2(vector<int> printVector);		//印出方法2

int main()
{
	vector<int> myVector;
	for (int i = 0; i < 5; i++)
		myVector.push_back(i * 10);

	PrintVector1(myVector);

	PrintVector2(myVector);

	system("pause");
	return 0;
}
//印出方法1
void PrintVector1(vector<int> printVector)
{
	vector<int>::iterator it;
	for (it = printVector.begin(); it != printVector.end(); it++)
		cout << *it << endl;
}
//印出方法2
void PrintVector2(vector<int> printVector)
{
	for (int i = 0; i < (int)printVector.size(); i++)
		cout << printVector[i] << endl;
}

2. 是否有資料

#include <iostream>
#include <vector>
using namespace std;

bool IsContains(vector<int> vecData, int nElement);	//是否有這資料

int main()
{
	vector<int> myVector;
	for (int i = 0; i < 5; i++)
		myVector.push_back(i * 10);

	cout << IsContains(myVector, 5) << endl;
	cout << IsContains(myVector, 20) << endl;

	system("pause");
	return 0;
}
//是否有這資料
bool IsContains(vector<int> vecData, int nElement)
{
	vector<int>::iterator findIt = std::find(vecData.begin(), vecData.end(), nElement);
	if (findIt == vecData.end())
		return false;
	else
		return true;
}

3. 插入資料
必須先找到要插入的 it 位置

#include <iostream>
#include <vector>
using namespace std;

void PrintVector1(vector<int> printVector);

//如果要 return iterator 必須傳入指標
vector<int>::iterator GetVectorItByIndex(vector<int>* pVector, int nIndex);

int main()
{
	vector<int> myVector;
	for (int i = 0; i < 5; i++)
		myVector.push_back(i * 10);

	PrintVector1(myVector);
	cout << endl;

	vector<int>::iterator it;
	it = GetVectorItByIndex(&myVector, 2);	//找到 index 2
	myVector.insert(it, 15);	//在 index 2 插入數字 15

	PrintVector1(myVector);

	system("pause");
	return 0;
}
vector<int>::iterator GetVectorItByIndex(vector<int>* pVector, int nIndex)
{
	if (nIndex < 0 || nIndex >= (int)pVector->size())
		return pVector->end();

	vector<int>::iterator it;
	it = pVector->begin();
	for (int i = 0; i < nIndex; i++)
		it++;

	return it;
}
void PrintVector1(vector<int> printVector)
{
	vector<int>::iterator it;
	for (it = printVector.begin(); it != printVector.end(); it++)
		cout << *it << endl;
}

4. 刪除資料
必須先找到欲刪除資料的 it 位置

#include <iostream>
#include <vector>
using namespace std;

void PrintVector1(vector<int> printVector);

//如果要 return iterator 必須傳入指標
vector<int>::iterator GetVectorItByElement(vector<int>* pVector, int nElement);
vector<int>::iterator GetVectorItByIndex(vector<int>* pVector, int nIndex);

int main()
{
	vector<int> myVector;
	for (int i = 0; i < 5; i++)
		myVector.push_back(i * 10);

	PrintVector1(myVector);
	cout << endl;

	vector<int>::iterator it;
	it = GetVectorItByIndex(&myVector, 2);	//找到 index 2
	myVector.erase(it);//刪除 index 2 的資料

	vector<int>::iterator it2;
	it2 = GetVectorItByElement(&myVector, 40);	//找到數值資料 40
	myVector.erase(it2);//刪除數值資料 40

	PrintVector1(myVector);

	system("pause");
	return 0;
}
vector<int>::iterator GetVectorItByElement(vector<int>* pVector, int nElement)
{
	vector<int>::iterator findIt = std::find(pVector->begin(), pVector->end(), nElement);
	return findIt;
}
vector<int>::iterator GetVectorItByIndex(vector<int>* pVector, int nIndex)
{
	if (nIndex < 0 || nIndex >= (int)pVector->size())
		return pVector->end();

	vector<int>::iterator it;
	it = pVector->begin();
	for (int i = 0; i < nIndex; i++)
		it++;

	return it;
}
void PrintVector1(vector<int> printVector)
{
	vector<int>::iterator it;
	for (it = printVector.begin(); it != printVector.end(); it++)
		cout << *it << endl;
}

C++ 的 STL-在迴圈中刪除 iterator
https://husking-studio.com/cpp-iterator-erase-in-loop/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *