Hello,

I'm just wondering whether or not, it is possible to get the vector Dimensions without them being set?

Basically, I'm converting some matlab code and there's a function size(VECTOR) which get's the dimentions of the vector being passed.

For example:

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[]) {

    vector<vector<int> > items;

    vector<int> theItems(20);

    for(unsigned i=0; (i < 20); i++)
    {
        theItems.push_back(i);
        items.push_back(theItems);
    }
}

I need to determine the dimensions of items. Can I use something like capacity? Or is there a STL function like in matlab where you have size.

Recommended Answers

All 3 Replies

If you want to know the size of a vector you would use items.size();. If you want to know the max amount of elements that you can have in the vector before it is resized than you would use items.capacity();.

Hey, thanks for your reply..

Basically, I am trying to convert this code (matlab):

function f = strip(blocks, sumthresh, zerocrossthresh)

% This function removes leading and trailing blocks that do 
% not contain sufficient energy or frequency to warrent consideration.
% Total energy is measured by summing the entire vector.
% Frequency is measured by counting the number of times 0 is crossed.
% The parameters sumthresh and zerocrossthrech are the thresholds,
% averaged across each sample, above which consideration is warrented.

% A good sumthresh would be 0.035
% A good zerocrossthresh would be 0.060

len = length(blocks);
n = sum(size(blocks)) - len;
min = n+1;
max = 0;
sumthreshtotal = len * sumthresh;
zerocrossthreshtotal = len * zerocrossthresh;
for i = 1:n
  currsum = sum(abs(blocks(i,1:len)));
  currzerocross = zerocross(blocks(i,1:len));
  if or((currsum > sumthreshtotal),(currzerocross > zerocrossthreshtotal))
    if i < min
      min = i;
    end
    if i > max;
      max = i;
    end
  end
end

% Uncomment these lines to see the min and max selected
% max
% min

if max > min
  f = blocks(min:max,1:len);
else
  f = zeros(0,0);
end

But for some reason, I don't know why they are using this:

n = sum(size(blocks)) - len;

Because, surely, I can just interate through the 2D vector, and then check to see if the blocks contain the criteral for energy/frequency..

Any ideas? :)

Depends on how blocks is ultimately defined.
Depends on what length(blocks) returns.
Depends on what size(blocks) returns.
Depends on what sum(size(blocks)) returns.

There are a lot of possibilities on each of the above. Unless there's a Matlab user that can answer these questions, we'd be just guessing.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.