一千万的字符串以逗号隔开,

clwd
弟弟的胡椒粉 2021-08-30 字数 60

如何以逗号为分隔符把这个一千万个字符串快速存进一个vector里面

KDE_Qt KDE与Qt编程技术
5 个回复
hanjiamajia
hanjiamajia 2021-08-31

原地构建吧

#define CHARLENGTH(array) ((sizeof(array)) / (sizeof(array[0])))

std::vector<const char*> v(10000000);

char longWord[] = "ab,cd,ef,g,h,ijk,opq,r,s,tuvw,xy,z";

char* wordCursor = longWord;

uint32_t vectorCursor = 0;

for (uint32_t idx = 0; idx < CHARLENGTH(longWord); idx++) {

if (longWord[idx] == ',') {

longWord[idx] = '0';

*(v.data() + vectorCursor) = wordCursor;

vectorCursor++;

wordCursor = longWord + idx + 1;

}

}

*(v.data() + vectorCursor) = wordCursor;

v.erase(v.begin() + vectorCursor + 1, v.end());

v.shrink_to_fit();

【 在 clwd 的大作中提到: 】

: 如何以逗号为分隔符把这个一千万个字符串快速存进一个vector里面

clwd
弟弟的胡椒粉 2021-08-31

for循环效率太低

【 在 hanjiamajia 的大作中提到: 】

: 原地构建吧

:     [code=c]

: ...................

hgoldfish
老鱼 2021-09-01

这个是一次扫描的算法,为什么会效率低?

不过楼上给的是 c 的方案,

cpp 里面有个 stringview,或者 Qt 的 QStringView 以及 QByteArrayView (Qt 6)

【 在 clwd (弟弟的胡椒粉) 的大作中提到: 】

: for循环效率太低

roy
天上掉大饼:学思行言 2021-09-04

这又不是python,哪儿来的for循环效率低?

【 在 clwd (弟弟的胡椒粉) 的大作中提到: 】

: for循环效率太低

roy
天上掉大饼:学思行言 2021-09-04

QT应该是用QString或者QByteArray吧

QT比较讨厌的一个设计是data()返回的只读缓存区不保证\0结尾

否则直接用data()获取缓存区然后用指针逐个访问字符,应该是效率最高的

【 在 hanjiamajia (hanjiamajia) 的大作中提到: 】

: 原地构建吧

:     [code=c]

: #define CHARLENGTH(array) ((sizeof(array)) / (sizeof(array[0])))

: ...................