Kristian Huselius, Dion Phaneuf, Matthew Lombardi, and Alex Tanguay also scored for Calgary (14-10-3), which earned a club record-tying ninth straight home win and has accumulated points in its last five games (4-0-1).
Daniel Sedin, Jan Bulis, and Kevin Bieksa scored for Vancouver (14-15-1).
The Flames moved to within three points of the lead in the Northwest Division, currently shared by Minnesota and Edmonton.
Calgary led 2-1 heading into the second but chased Vancouver goalie Roberto Luongo from the game by scoring twice in the period.
Iginla's team-leading 16th goal of the season at 6:06, the first even-strength goal of the night, gave Calgary it's first two-goal lead.
Lombardi made it 4-1 at 9:43, prompting Vancouver coach Alain Vigneault to replace Luongo with Dany Sabourin after Luongo surrendered four goals on 24 shots.
Vancouver made it interesting in the third when Bulis scored at 5:45 and Bieksa connected on a power play at 10:41 to make it 4-3. However, goaltender Miikka Kiprusoff was solid the rest of the way and Iginla set up Tanguay's empty-net goal with 36 seconds left to clinch it.
Kiprusoff finished with 26 saves. Sabourin stopped all 13 shots he faced.
Huselius opened the scoring at 4:59 of the first on the power play. After killing three consecutive penalties, including a two minute two-man disadvantage, Vancouver scored with the man advantage to make it 1-1.
Kevin Bieksa's shot went off the post behind Kiprusoff and out the other side to Sedin, who put the puck into the open net.
Calgary regained the lead at 18:03 when Phaneuf deflected Roman Hamrlik's slapshot.
NOTES: Calgary D Richie Regehr, younger brother of teammate Robyn, and Vancouver RW Lee Goren both made their season debut. Both had stints with the NHL team last year but had spent all of this season in the AHL . . . Vancouver C Trevor Linden has not scored in 28 games since registering a goal on opening night . . . Calgary and Vancouver meet three more times this month . . . Luongo has appeared in 29 of Vancouver's 30 games.