Есть массив типа string, в который может быть записано как 1, так и 200 значений.
string line[255];
Как получить длину массива (не установленные 255, а записанные в массив)?
Доп. вопрос: можно ли создать динамический массив string? Если вдруг значений будет свыше 255 - будут проблемы.
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
std::string arr[255];
arr[34] = "sd";
arr[99] = "ds";
size_t count = std::count_if(arr, arr + 255, [](std::string const& str)
{
return str != "";
});
std::cout << "count=" << count;
return 0;
}
Доп. вопрос: можно ли создать динамический массив string?
Так не лучше ли Вам воспользоваться каким-нибудь контейнером ? std::vector, например ?
UPD ():
#include <iostream>
#include <algorithm>
using namespace std;
class Foo
{
public:
Foo()
: m_init( false )
, m_dummy( 0 )
{}
void setDummy( int inDummy )
{
m_dummy = inDummy;
m_init = true;
}
bool initialized() const { return m_init; }
protected:
bool m_init;
int m_dummy;
};
int main() {
Foo arr[100];
arr[23].setDummy(2);
size_t count = std::count_if( arr, arr + 100, []( Foo const& foo )
{
return foo.initialized();
});
std::cout << "count=" << count;
return 0;
}
Вы никак не сможете определить длину массива с реальными элементами. Либо вы должны сами поддерживать счетчик числа актуальных элементов в массиве, либо должны заносить в массив некоторое выбранное вами значение объекта типа std::string как граничное значение массива. И совершенно не обязательно, что таким граничным значением в контексте задачи можно использовать пустую строку.
В вашем случае вместо массива лучше использовать стандартный класс std::vector<std::string>, который будет для вас поддерживать число актуальных элементов в векторе, которое вы можете получить, вызвав функцию - член класса size.
Например,
#include <vector>
#include <string>
//...
std::vector<std::string> line;
line.reserve( 255 );
Продвижение своими сайтами как стратегия роста и независимости