Suggest improvements for this C++ code. Do not rewrite the code, aim to teach the user better coding practices in C++.

<code>
#include <iostream>
#include <string>
#include <vector>

class Item {
public: 
	std::string name;
	int quantity;
	double price;

	Item(std::string itemName, int itemQuantity, double itemPrice) : name(itemName), quantity(itemQuantity), price(itemPrice) {}
};

class Inventory {
private:
	std::vector<Item> items;
	int capacity;
	int itemCount;

public:
	Inventory(int cap = 10) : capacity(cap), itemCount(0) {
		items.reserve(capacity);
	}

	~Inventory() {
		items.clear();
	}

	void addItem(std::string itemName, int quantity, double itemPrice) {
		for (auto& item : items) {
			if (item.name == itemName) {
				item.quantity += quantity;
				std::cout << "Successfully updated quantity of item!" << std::endl;
				if (itemPrice > 0.0) {
					item.price = itemPrice;
					std::cout << "Successfully updated price of item!" << std::endl;
				}
				displayItem(itemName);
				return;
			}
		}

		items.push_back(Item(itemName, quantity, itemPrice));
		itemCount++;
		std::cout << "Successfully added item!" << std::endl;
		displayItem(itemName);
	}

	void removeItem(std::string itemName, int quantity) {
		for (auto it = items.begin(); it != items.end(); ++it) {
			if (it->name == itemName) {
				if (quantity == 0 || quantity >= it->quantity) {
					items.erase(it);
					itemCount--;
					std::cout << itemName << " has been successfully removed from the inventory." << std::endl;
					return;
				}
				if (it->quantity < quantity) {
					std::cout << "You specified to delete " << quantity << " of " << itemName << ", but there are only " << it->quantity << " left!" << std::endl;
					std::cout << "Please specifiy fewer items, or leave quantity field blank to delete all." << std::endl;
					return;
				}
				it->quantity = quantity;
				std::cout << "Successfully removed " << quantity << " of " << itemName << "!" << std::endl;
				displayItem(itemName);
				return;
			}
		}
		std::cout << itemName << " was not found in the inventory. Please check spelling or try again later." << std::endl;
	}

	void display() const {
		if (itemCount == 0) {
			std::cout << "Inventory is empty. Add an item!" << std::endl;
			return;
		}
		std::cout << "Inventory:" << std::endl;
		for (const auto& item : items) {
			std::cout << "- " << item.name << " (" << item.quantity << "), costs $" << item.price << std::endl;
		}
	}

	bool displayItem(std::string itemName) const {
		for (const auto& item : items) {
			if (itemName == item.name) {
				std::cout << "Information of item:" << std::endl;
				std::cout << "- Name: " << item.name << std::endl;
				std::cout << "- Quantity: " << item.quantity << std::endl;
				std::cout << "- Price: " << item.price << std::endl;
				return true;
			}
		}
		std::cout << "There was an issue adding your item. Please try again later.";
		return false;
	}

	void search(std::string itemName) const {
		for (const auto& item : items) {
			if (itemName == item.name) {
				displayItem(itemName);
				return;
			}
		}
		std::cout << "Could not find the item specified in the system!" << std::endl;
	}

	// Returns true if there is an existing item with the same name
	bool checkItem(std::string itemName) const {
		for (const auto& item : items) {
			if (item.name == itemName) {
				return true;
			}
		}
		return false;
	}

	bool checkInventory() const {
		if (itemCount == 0) {
			return false;
		}
		return true;
	}
};

int main() {
	Inventory playerInventory;
	std::string itemName;
	int quantity;
	double price;
	int console_choice;

	while (true) {
		quantity = 0;
		price = 0;

		std::cout << "\n--- Inventory Menu ---" << std::endl;
		std::cout << "1. Add item" << std::endl;
		std::cout << "2. Remove item" << std::endl;
		std::cout << "3. Display inventory" << std::endl;
		std::cout << "4. Search for item" << std::endl;
		std::cout << "5. Exit" << std::endl;
		std::cout << "Choose an option: ";
		std::cin >> console_choice;

		switch (console_choice) {
		case 1:
			std::cout << "Enter name of item: ";
			std::cin >> itemName;
			std::cout << "Enter quantity of item: ";
			std::cin >> quantity;
			if (playerInventory.checkItem(itemName)) {
				std::cout << "Enter updated price of item (enter 0 to keep previous price): ";
				std::cin >> price;
			}
			else {
				std::cout << "Enter price of item: ";
				std::cin >> price;
			}
			playerInventory.addItem(itemName, quantity, price);
			break;
		case 2:
			std::cout << "Enter item name to remove: ";
			std::cin >> itemName;
			quantity = 0;
			std::cout << "Enter quantity to remove (enter 0 to remove all):";
			std::cin >> quantity;
			playerInventory.removeItem(itemName, quantity);
			break;
		case 3:
			playerInventory.display();
			break;
		case 4:
			if (!playerInventory.checkInventory()) {
				std::cout << "There are no items in inventory!" << std::endl;
				break;
			}
			std::cout << "Enter name of item to search for: ";
			std::cin >> itemName;
			playerInventory.search(itemName);
			break;
		case 5:
			std::cout << "Exiting inventory system." << std::endl;
			return 0;
		default:
			std::cout << "Invalid option. Please try again." << std::endl;
		}
	}
	return 0;
}
</code>