Army sizes and casulaties in the ancient world were typically off by a huge margin. For example, Thermopylae had ancient estimates at over a million Persians, which just doesn't make sense. The ancient world simply couldn't support an invading army that large by foraging or traditional supply. Just think about how many ships that would require.
Herodotus, who was useful in many other ways, also gave figures that are likely at least an order of magnitude too large.
More modern estimates of Cannae seem to be 10-16,000 on the Roman side. Part of the reason is that Hannibal was unlikely to be able to (or would necessarily want to) prevent a rout by the infantry.
Ancient warfare was very psychological and would typically end in a rout rather than a slaughter. Even now with far deadlier weapons, when we talk about "casulaties" we tend to include wounded and those outnumber the killed often by 2:1 or more (side note: your Vietnam casualty number is fatal casualties and pretty much correct).
Also, at this time the population of Roman Italy was likely close to a million or more. The city of Rome peaked at 1-2 million population before the Fall. Even in Republic times it was probably 200-500k+.
So the damage of Cannae was probably hugely psychological and presented a short-term problem in that it takes time to raise and train an army but given the demographics of the Roman Republic, it probably didn't represent a massive loss of military-age men in the same way that, say, World War One or Two did.