Introducción
Comenzaremos resolviendo el algoritmo para determinar si un número es narcisista en CPP o C++. Escribiremos una función que recibe un entero y regresa un booleano indicando si el número recibido es narcisista.

Nota: si quieres saber qué es un número narcisista, así como el algoritmo para determinarlo lee: Solución al algoritmo de número narcisista en muchos lenguajes de programación.
Número narcisista en C++
La función que dije queda escrita así:
bool esNarcisista(int numero){
	// Nota: to_string pertenece a std, la llamada normal sería std::to_string
	string numeroComoCadena = to_string(numero);
	double longitudDelNumero = numeroComoCadena.size();
	double suma = 0;
	// Recorrer cadena, carácter por carácter
	for(int indice = 0; indice < longitudDelNumero; indice++){
		//Convertir el carácter a entero
		double cifraActual = numeroComoCadena[indice] - '0';
		// Elevarlo a la potencia dada por la longitud
		double elevado = pow(cifraActual, longitudDelNumero);
		// Sumar el resultado a suma
		suma = suma + elevado;
	}
	
	// Si la suma y el número recibido son iguales, es narcisista
	if(suma == numero){
		return true;
	}else{
		return false;
	}
}
Hay algunas cosas importantes que notar. Por ejemplo, para convertir el número a cadena usamos std::to_string.
Más tarde recorremos el número como si fuera una cadena, y vamos tomando carácter por carácter. Ese carácter es de tipo char, lo convertimos a entero y luego lo elevamos a la potencia N.
¿Y cuál es la potencia N? bueno, N es la longitud del número; es decir, el número de cifras que tiene.
Para elevarlo usamos la función pow en CPP.
Ejemplo completo
Para ver cómo podemos llamar a la función desde un programa normal escrito en C++ implementamos este código:
/*
    Determinar si un número es narcisista usando C++
    https://parzibyte.me/blog/
*/
#include <iostream>
#include <math.h>
using namespace std;
// Prototipo
bool esNarcisista(int numero);
int main(){
	// Algunos números para probar
	int numeros[] = {1, 2, 3, 4, 153, 28, 11, 96, 407, 1634, 54748};
	for(int x = 0; x < sizeof(numeros) / sizeof(numeros[0]); x++){
		printf("%d es narcisista? %s\n", numeros[x], esNarcisista(numeros[x]) ? "true": "false");
	}
}
// función
bool esNarcisista(int numero){
	// Nota: to_string pertenece a std, la llamada normal sería std::to_string
	string numeroComoCadena = to_string(numero);
	double longitudDelNumero = numeroComoCadena.size();
	double suma = 0;
	// Recorrer cadena, carácter por carácter
	for(int indice = 0; indice < longitudDelNumero; indice++){
		//Convertir el carácter a entero
		double cifraActual = numeroComoCadena[indice] - '0';
		// Elevarlo a la potencia dada por la longitud
		double elevado = pow(cifraActual, longitudDelNumero);
		// Sumar el resultado a suma
		suma = suma + elevado;
	}
	
	// Si la suma y el número recibido son iguales, es narcisista
	if(suma == numero){
		return true;
	}else{
		return false;
	}
}
Lo que hacemos es definir un arreglo de enteros, recorrerlo e imprimir si son narcisistas o no. La salida es la siguiente, aunque recuerda que puedes compilarlo y probarlo por ti mismo.

Así es como terminamos.