Determine if someone has won a game of Tic-Tac-Toe on a board of any size
You should not use namespace std. It is bad practice, that will hurt you in the long run.
I do not really like your constructor:

TicTacToe(int sz) : N(sz) {
   board.resize(N);
   winArr.resize(2*N+2, 0);
   for(int i = 0; i &lt; N; i++)
      board[i].resize(N, '.');
}


The argument should be const. Then you should use the initializer list for all variables:

TicTacToe(const int sz) 
    : board(sz, std::vector&lt;char&gt;(sz, '.')), winArr(2*sz+2), N(sz) {}

In your updateWinArr() function you only check the diagonal in one direction:

// check diagonals :
if(nRow == nCol) // left diagonal
    winArr[2*N] += nVal;
else if(nRow+nCol == N-1) // right diagonal
    winArr[2*N+1] += nVal;


However, there are 4 attached diagonal points you should check.
You logic is flawed. An X negates all previous 'O's. However, in your code you simply decrement:

int nVal = (player == 'X' ? 1 : -1);
winArr[nRow] += nVal;
winArr[N + nCol] += nVal;


This will make the following sequence a win, although it is not valid:



Sequence: X X O X X
Values  : 1 2 1 2 3

I think it would be better to create a simple struct, that holds the relevant information:

X or O
left diagonal value
right diagonal value
horizontal value
vertical value


Now you can calculate the appropriate values by first checking, whether the mark is the right one and then add the horizontal value of the left/right neighbor and so on.