Find all palindromes in the danish language
You are doing a double loop checking against all other words to determine if something is a palindrome. This is unnecessary. You can look at a single word and determine if it is a palindrome, by reversing it. This should reduce the number of checks by a factor of n.

You should also prefer using a range for to a raw for-loop. 

find_palindromes can then become something like this:

std::vector&lt;std::string&gt; find_palindromes(const std::vector&lt;std::string&gt;&amp; words)
{
    for (const std::string&amp; word : words )
    {
        std::string reverseWord(word);
        std::reverse(reverseWord.begin(), reverseWord.end());

        if (word == reverseWord)
        {
            if (std::find(palindromes.begin(), palindromes.end(), first_word) == palindromes.end())
            {
                palindromes.push_back(first_word);
            }
        }
     }

    return palindromes;
}