Click here to Skip to main content
15,885,998 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
This is the code:
C++
string hey = "hello hello wassup";
std::vector<string> arr;
arr = Split(hey, ' ');

The split looks kind of like this:
C++
std::vector<string> Split(string str, char chr) {
  ... stuff i know works
  std::vector<string> ret;
  ... code to add data to ret, which also works
  return ret;

I assume there is something wrong with using std::vector<string> as a function return. How do i fix this?

What I have tried:

I have tried assigning it std::vector<string> arr = Split(hey, ' '); and as described above, none of it works. Both gives me bad allocation error.
Posted
Updated 6-Dec-21 0:39am
Comments
Richard MacCutchan 6-Dec-21 6:20am    
As with all your other questions, the error lies in the code you have written. But since we cannot see that code we cannot offer suggested solutions.

I have just taken the above code, added some simple split logic and tested it and it works fine. So the problem must be in the code that you describe as "stuff i know works".
 
Share this answer
 
Comments
CPallini 6-Dec-21 6:39am    
I guess you are right.
Richard MacCutchan 6-Dec-21 8:49am    
As your sample below clearly demonstrates.
There is something wrong in your assumptions. Try
C++
#include <iostream>
#include <sstream>
#include <vector>

using namespace std;
std::vector<string> Split(string str);

int main()
{ 
  string hey = "hello hello wassup";
  vector<string> arr;
  arr = Split(hey);
  
  for (const auto & s : arr)
    cout << s << "\n";
}

vector<string> Split(string str)
{
  istringstream iss(str);
  vector<string> ret;
  while ( iss )
  {
    string s;
    iss >> s;
    if ( ! s.empty() )
      ret.push_back(s);
  }
  return ret;
}
 
Share this answer
 
Comments
Member 14769677 6-Dec-21 6:51am    
So it kind of works but also not, doesn't give the same error but now it doesn't display anything instead.
CPallini 6-Dec-21 6:53am    
You should post your code, in order to get meaningful help.
Rick York 6-Dec-21 11:43am    
I have a question for you : do you consider it better to return a vector of strings from the function instead of passing a reference to the vector as an argument to the function or are they essentially equivalent? With move semantics I can see how there would be little difference but I tend to prefer to pass a reference.
CPallini 7-Dec-21 2:18am    
There is no performance penalty so I tend to use return.
I reckon it is another of the many, many C++ subtleties. You have trade off some esplicitness (if you pass a reference it very apparent what is going on) for code elegance.
Stefan_Lang 7-Dec-21 5:22am    
I'm inclined to agree: the std implementation and return optimization is so good nowadays that it's hard to come up with a syntax that works even better.

Moreover, when suggesting code to a beginner, there's no point wasting time on such subtleties: it's better to clearly write what you intend rather than a subtle alternative that solves a problem that no one asked about.

(and have a 5!)

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900