Размер массива string

346
27 января 2017, 06:37

Есть массив типа string, в который может быть записано как 1, так и 200 значений.

string line[255];

Как получить длину массива (не установленные 255, а записанные в массив)?

Доп. вопрос: можно ли создать динамический массив string? Если вдруг значений будет свыше 255 - будут проблемы.

Answer 1
#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;
}
Answer 2

Вы никак не сможете определить длину массива с реальными элементами. Либо вы должны сами поддерживать счетчик числа актуальных элементов в массиве, либо должны заносить в массив некоторое выбранное вами значение объекта типа std::string как граничное значение массива. И совершенно не обязательно, что таким граничным значением в контексте задачи можно использовать пустую строку.

В вашем случае вместо массива лучше использовать стандартный класс std::vector<std::string>, который будет для вас поддерживать число актуальных элементов в векторе, которое вы можете получить, вызвав функцию - член класса size.

Например,

#include <vector>
#include <string>
//...
std::vector<std::string> line;
line.reserve( 255 );
READ ALSO
Получение директории из argv

Получение директории из argv

В argv[0] находится полный путь до до исполняемого файла, а как получить директорию, в которой находится файл?

364
Преобразование огромных чисел

Преобразование огромных чисел

Преобразую значения из string в long long

426
Ошибка при обновлении данных в MySQL

Ошибка при обновлении данных в MySQL

Есть таблица в базе данных

366